From 576a0423374d1ffb3097f19d237e75a12c9948b8 Mon Sep 17 00:00:00 2001 From: "Blixt Daniel (Consultant)" Date: Mon, 12 Feb 2018 14:22:22 +0100 Subject: [PATCH 1/2] Add ability to review-build as multibranch pipeline Addition of Jenkinsfile to enable pipeline build. Addition of multibranch pipeline job for reviews. --- Jenkinsfile | 94 +++++++++++++++++++ .../src/jobs/groovy/review_mb_pipeline.groovy | 45 +++++++++ 2 files changed, 139 insertions(+) create mode 100644 Jenkinsfile create mode 100644 jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..f0de41e --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,94 @@ +#!groovy +/** +* Pipeline configuration for JenkinsAsCode review-jobs +*/ + + +/* global definitions */ +def integrationBranch = 'env.default_branch' + +/** +* begin pipeline +*/ + +if (env.BRANCH_NAME == integrationBranch) { + currentBuild.result = 'NOT_BUILT' + return +} + +currentBuild.result = 'SUCCESS' +try { + node( env.utility_slave ) { + ansiColor('xterm') { + // execute tests using the job-dsl-plugin for private branches + stage ( 'Checkout' ) { + scm checkout + } + stage ( 'Build XML' ) { + dir ('jobdsl-gradle') { + sh script: ''' + ./gradlew --no-daemon buildXMl + '''.stripIndent().trim() + } + } + stage ( 'test' ) { + dir ('jobdsl-gradle') { + sh script: ''' + ./gradlew --no-daemon test + '''.stripIndent().trim() + } + } + + stage ( 'Build Docker' ) { + dir ('dockerizeit') { + sh script: ''' + # Assume no proxy if it is not set + export http_proxy=${http_proxy:-} + export https_proxy=${https_proxy:-} + export no_proxy=${no_proxy:-} + env + docker-compose build + '''.stripIndent().trim() + } + } + + stage ( 'Generate compose yml' ) { + dir ('dockerizeit') { + sh script: ''' + ./generate-compose.py \ + --debug \ + --file docker-compose.yml \ + --jmaster-image test-image \ + --jmaster-version test-version \ + --jslave-image test-image \ + --jslave-version test-version \ + && cat docker-compose.yml \ + && git checkout HEAD docker-compose.yml + '''.stripIndent().trim() + } + } + stage ( 'Build Munchausen' ) { + dir ('dockerizeit/munchausen') { + sh script: ''' + cp ../docker-compose.yml . + docker build \ + --build-arg http_proxy \ + --build-arg https_proxy \ + --build-arg no_proxy \ + -t munchausen \ + . + '''.stripIndent().trim() + } + } + } + } +} catch ( e ) { + currentBuild.result = 'FAILURE' + throw e +} +finally { + println ( "done" ) +} +/** +* end pipeline +*/ diff --git a/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy b/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy new file mode 100644 index 0000000..beaedd9 --- /dev/null +++ b/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy @@ -0,0 +1,45 @@ +import javaposse.jobdsl.dsl.DslFactory +import javaposse.jobdsl.dsl.Job + +def defaultCredentials = Helpers.readEnvVariable("default_credentials", "") +def defaultBranch = Helpers.readEnvVariable("default_branch", "") +def defaultRepo = Helpers.readEnvVariable("default_repo", "") + +DslFactory dslFactory = this +dslFactory.multibranchPipelineJob( "jenkins_as_a_code-review-pipeline" ) { + + branchSources { + github { + buildOriginBranchWithPR ( false ) + buildOriginPRMerge ( true ) + checkoutCredentialsId ( defaultCredentials ) + // Exclude default branch from review builds - that one will be built by jenkins_as_a_code-pipeline instead. + if ( defaultBranch != "" ) { + excludes ( defaultBranch ) + } + repoTokens = defaultRepo.split(':')[-1].split('/') + if (repoTokens.length > 2) { + repoName = '/'.join(repoTokens[1..-1]) + repoOwner( ${repoTokens[0]} + } else if (repoTokens.length == 2 ) { + repoName = repoTokens[1] + repoOwner( ${repoTokens[0]} + } else { + repoName = repoTokens[0] + } + repository ( repoName ) + scanCredentialsId ( "" ) + } + + triggers { + periodic ( 240 ) + } + + // remove dead branches and logs + orphanedItemStrategy { + discardOldItems { + numToKeep( 0 ) + daysToKeep( 1 ) + } + } +} From 19a572d9e63c70597f01391ba4d5bd269c26cb35 Mon Sep 17 00:00:00 2001 From: "Blixt Daniel (Consultant)" Date: Mon, 12 Feb 2018 14:41:10 +0100 Subject: [PATCH 2/2] Clean-up syntax and whitespace --- Jenkinsfile | 4 +-- .../src/jobs/groovy/review_mb_pipeline.groovy | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index f0de41e..c86dec4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,7 +23,7 @@ try { // execute tests using the job-dsl-plugin for private branches stage ( 'Checkout' ) { scm checkout - } + } stage ( 'Build XML' ) { dir ('jobdsl-gradle') { sh script: ''' @@ -38,7 +38,6 @@ try { '''.stripIndent().trim() } } - stage ( 'Build Docker' ) { dir ('dockerizeit') { sh script: ''' @@ -51,7 +50,6 @@ try { '''.stripIndent().trim() } } - stage ( 'Generate compose yml' ) { dir ('dockerizeit') { sh script: ''' diff --git a/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy b/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy index beaedd9..baf69e5 100644 --- a/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy +++ b/jobdsl-gradle/src/jobs/groovy/review_mb_pipeline.groovy @@ -1,3 +1,5 @@ +import job.Helpers + import javaposse.jobdsl.dsl.DslFactory import javaposse.jobdsl.dsl.Job @@ -17,29 +19,33 @@ dslFactory.multibranchPipelineJob( "jenkins_as_a_code-review-pipeline" ) { if ( defaultBranch != "" ) { excludes ( defaultBranch ) } + // Parse out repository and organisation from default_repo repoTokens = defaultRepo.split(':')[-1].split('/') if (repoTokens.length > 2) { - repoName = '/'.join(repoTokens[1..-1]) - repoOwner( ${repoTokens[0]} + repoName = '/'.join(repoTokens[1..-1]) + repoOwner( ${repoTokens[0]} ) } else if (repoTokens.length == 2 ) { repoName = repoTokens[1] - repoOwner( ${repoTokens[0]} + repoOwner( ${repoTokens[0]} ) } else { repoName = repoTokens[0] } repository ( repoName ) + scanCredentialsId ( "" ) } + } - triggers { - periodic ( 240 ) - } + triggers { + // Scan MB-pipeline every 4hours. + periodic ( 240 ) + } - // remove dead branches and logs - orphanedItemStrategy { - discardOldItems { + // remove dead branches and logs + orphanedItemStrategy { + discardOldItems { numToKeep( 0 ) daysToKeep( 1 ) - } - } + } + } }