Better way to load all the plugins/dependencies for local java testing using jenkinsrule

30 views
Skip to first unread message

Charles Moulliard

unread,
Dec 16, 2020, 12:48:41 PM12/16/20
to Jenkins Users
Hi

As a java unit test will need jar files, it is then needed to load them nd to declare them within the pom.xml file or build.gradle file

Example: 
    testCompile("org.jenkins-ci.main:jenkins-test-harness:${jenkinsTestHarness}")
    testCompile("org.jenkins-ci.main:jenkins-war:${jenkinsCore}")
    testCompile("org.jenkins-ci.plugins:script-security:${jenkinsTestSecurityScript}@jar")

    // Add the jar file as the testPlugins will install the hpi/jpi files and not the jar needed by the junit test
    testCompile 'org.jenkins-ci.tools:git-parameter:0.9.13@jar'

    testCompile 'org.jenkins-ci.plugins:structs:1.20@jar'
    testCompile 'org.jenkins-ci.plugins:git:3.10.0@jar'
    testCompile 'org.jenkins-ci.plugins:git-client:3.5.1@jar'
    testCompile 'org.jenkins-ci.plugins:credentials:2.3.9@jar'
    testCompile 'org.jenkins-ci.plugins:scm-api:2.6.4@jar'
    testCompile 'org.jenkins-ci.plugins:matrix-project:1.18@jar'
    testCompile 'org.jenkins-ci.plugins:global-variable-string-parameter:1.2@jar'
    testCompile 'org.jenkins-ci.plugins:junit:1.47@jar'

    testCompile 'org.jenkins-ci.plugins:workflow-remote-loader:1.5@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-aggregator:2.6@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-api:2.40@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-basic-steps:2.18@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-scm-step:2.11@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-cps:2.80@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-durable-task-step:2.35@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-job:2.38@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-multibranch:2.20@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-step-api:2.23@jar'
    testCompile 'org.jenkins-ci.plugins.workflow:workflow-support:3.3@jar'

    testCompile 'org.jenkins-ci.plugins:matrix-auth:2.6.2@jar'

    testCompile 'org.eclipse.jgit:org.eclipse.jgit:5.10.0.202012080955-r'
    
    // Plugins to install in test jenkins instance running locally
    testPlugins 'org.jenkins-ci.main:maven-plugin:3.8'

    testPlugins 'org.jenkins-ci.plugins:cloudbees-folder:5.14'
    testPlugins 'org.jenkins-ci.plugins:credentials:2.3.9'
    testPlugins 'org.jenkins-ci.plugins:structs:1.20'
    testPlugins 'org.jenkins-ci.plugins:global-variable-string-parameter:1.2'

    testPlugins 'org.jenkins-ci.tools:git-parameter:0.9.13'
    testPlugins 'org.jenkins-ci.plugins:git:3.10.0'
    testPlugins 'org.jenkins-ci.plugins:git-client:3.5.1'
    testPlugins 'org.jenkins-ci.plugins:scm-api:2.6.4'
    testPlugins 'org.jenkins-ci.plugins:matrix-project:1.18'

    testPlugins 'org.jenkins-ci.plugins:workflow-remote-loader:1.5'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-aggregator:2.6'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-api:2.40'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-basic-steps:2.18'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-scm-step:2.11'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-cps:2.80'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-durable-task-step:2.35'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-job:2.38'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-multibranch:2.20'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-step-api:2.23'
    testPlugins 'org.jenkins-ci.plugins.workflow:workflow-support:3.3'

    testPlugins 'org.jenkins-ci.plugins:matrix-auth:2.6.2'

    testPlugins 'org.jenkins-ci.plugins:junit:1.47'

    testPlugins 'org.jenkins-ci.plugins:matrix-project:1.18'

As you can imagine, this process is long,tedious, will change when we upgrade to another jenkins server (as the list of the default plugins will be updated).

Question:
Is there a script, tool able to grab from jenkins the plugins list and next to create the corresponding plugins to be imported for Jenkinsrule unit test and GAVs dependencies (pom.xml or build.gradle) ?

Cheers

charles

Charles Moulliard

unread,
Dec 17, 2020, 3:51:34 AM12/17/20
to Jenkins Users
I created 2 groovy scripts that I execute in a jenkins instance to figure out the list to be used and to be configured within the `build.gradle` file

Jenkins.instance.pluginManager.plugins
.findAll { !(it.shortName in ['job-dsl', 'structs']) }
.collect { "testPlugins '${it.manifest.mainAttributes.getValue("Group-Id")}:${it.shortName}:${it.version}'" }
.sort()
.each { println it }

and testCompile dependencies
Jenkins.instance.pluginManager.plugins
.findAll { !(it.shortName in ['job-dsl', 'structs']) }
.collect { "testCompile '${it.manifest.mainAttributes.getValue("Group-Id")}:${it.shortName}:${it.version}@jar'" }
.sort()
.each { println it }

Message has been deleted

Charles Moulliard

unread,
Dec 18, 2020, 12:50:06 PM12/18/20
to jenkins...@googlegroups.com


On Thu, Dec 17, 2020 at 10:38 AM Yannick Lacaute <yannick...@gmail.com> wrote:
Hi Charles,

I am working on a pipeline (build java > build docker > deploy pod in Openshift) and currently I have no unit test.
I think you achieved something huge !! Well done by the way :)
Many thanks.

Could you please give me someone web links or tips in order to do the same as you ?
They are still a lot of things todo as by example we suffer from Eclipse Sisu/Guice issues when the Maven job starts - https://stackoverflow.com/questions/65353903/error-injecting-public-org-apache-maven-repository-internal-defaultversionresol but what I'm currently developing i available here : client: https://github.com/ch007m/jenkins-job-dsl/tree/main/src/test/java/dev/snowdrop  
No. This project doesn't seem to bootstrap a jenkins server as we can do using the @Rule Jenkinsrule ....

Is there a sample project from which we can start ?
See my previous remark 

Should we just have to follow the same organization in JenkinsPipelineUnit > test ?
Have you automatised your scripts or do you have to play them sometimes to update your project ?
I plan to create jobs using my Groovy DSL scripts with a seed job to create all the children jobs such as a shell job, maven job, ... 

Thank for you advices

PS : Currently my pipeline is declared in a shared library.



Regards



--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/37fb12c3-604e-4ad5-881a-4836e1a7dca3n%40googlegroups.com.


--
Yannick LACAUTE
Consultant indépendant
39 rue de Wattignies, 75012 Paris
Tel : 06 16 85 95 76

--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAG1W_Ax2PcOyYAcgMWxZ5_PZJeoamWDkvBPhjJvbv9_9Hyi6JQ%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages