![Page 1: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/1.jpg)
Supercharged Configuration As Code
Bulk Updates with Job DSL and System Groovy
![Page 2: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/2.jpg)
Who Am I
• Alan Beale
Build Engineer @ Chicago Trading Company
!
Any opinions expressed are my own and do not represent the opinions of my employer
![Page 3: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/3.jpg)
Observations about build jobs
• Jobs Change over Time
• Most jobs are like other jobs
![Page 4: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/4.jpg)
Jobs Change Over Time
• Correctness Changes
• Bug Fixes
• Complexity Increase
![Page 5: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/5.jpg)
Most Jobs are Similar
• Small number of themes with structured variation
![Page 6: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/6.jpg)
How do these observation help?
• Job DSL enables us to using coding techniques to create job configurations
• System groovy scripts enable use to automate repeated calls to jobs
![Page 7: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/7.jpg)
Player Piano
Our metaphor for bulk job regeneration
![Page 8: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/8.jpg)
The Piano Roll
• Controls the sound of the piano
• Orchestrates the automation of job recreation
![Page 9: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/9.jpg)
Job DSL for gradle buildjob {
name "git-gradle-simple-build"
scm {
git('/Users/alanbeale/sandbox/samples/java/basic',
'*/master' )
}
steps {
gradle ( "build", null, true )
}
}
![Page 10: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/10.jpg)
Evolution Examplejob {
name "git-gradle-build-with-worspace-option"
scm {
git('/Users/alanbeale/sandbox/samples/java/basic',
‘*/master')
}
steps {
gradle ( "build", null, true
){ node -> //hudson.plugins.gradle.Gradle
node/useWorkspaceAsHome(true)
}
}
}
![Page 11: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/11.jpg)
Add Gerrit Triggerjob {
! name "git-gradle-build-with-gerrit-trigger"
! scm {
git(
'/Users/alanbeale/sandbox/samples/java/basic',
'$GERRIT_BRANCH'
){ node ->
node/extensions {
'hudson.plugins.git.extensions.impl.BuildChooserSetting'{
buildChooser(buildChooserAttrs){
separator('#')
}
}
}
def remoteConfig = node/userRemoteConfigs/
'hudson.plugins.git.UserRemoteConfig'
remoteConfig << refspec('$GERRIT_REFSPEC')
}
! }
![Page 12: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/12.jpg)
continued triggers { gerrit { events { PatchsetCreated DraftPublished } project( "plain: /Users/alanbeale/sandbox/samples/java/basic", 'ant:**' ) } } steps { gradle ("build", null, true) { node -> //hudson.plugins.gradle.Gradle node/useWorkspaceAsHome(true) } } }
![Page 13: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/13.jpg)
Repeated elements
• Job Name
• Git URL
• Gerrit Trigger Project
![Page 14: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/14.jpg)
Towards Job Factory
• Factor out common operations
• Parameterize calling Job DSL
![Page 15: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/15.jpg)
Create Utility class
• jobdsl.JobUtilities methods
• setupGradleGerritJobName() • setupGerritScm() • setupGerritTrigger() • setupGradleBuild()
![Page 16: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/16.jpg)
generator job DSLjob {
name "gradle-gerrit-job-generator"
parameters {
stringParam("PROJECT_NAME","sample/java/library")
}
steps {
dsl {
removeAction('IGNORE')
ignoreExisting(false)
text('''
import jobdsl.JobUtilities
import javaposse.jobdsl.dsl.Job
def gerritProjectName= "${PROJECT_NAME}"
def simpleJavaVerifyJob = job {}
JobUtilities.setupGradleGerritJobName(simpleJavaVerifyJob, gerritProjectName)
JobUtilities.setupGerritScm( simpleJavaVerifyJob, gerritProjectName)
JobUtilities.setupGerritTrigger( simpleJavaVerifyJob, gerritProjectName)
JobUtilities.setupGradleBuild(simpleJavaVerifyJob)
''')
![Page 17: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/17.jpg)
Part 2 : System Groovy
![Page 18: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/18.jpg)
Regeneration scriptimport jenkins.model.* !import hudson.model.* !def jenkins = jenkins.model.Jenkins.instance def jobGeneratorName='gradle-gerrit-job-generator' def jobGenerator = jenkins.getItem(jobGeneratorName) def projectParamName ='PROJECT_NAME' def projectParamValue=‘sample/java/library' !if(jobGenerator){ boolean buildQueued = jobGenerator.scheduleBuild( 5, new Cause.UserIdCause(), new ParametersAction( new StringParameterValue(projectParamName, projectParamValue) ) ) }
!
![Page 19: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/19.jpg)
Regenerate from existing job nameimport jenkins.model.* !import hudson.model.* !def jenkins = jenkins.model.Jenkins.instance def jobGeneratorName='gradle-gerrit-job-generator' def jobGenerator = jenkins.getItem(jobGeneratorName) def projectParamName ='PROJECT_NAME' def jobs = jenkins.getItems() !def gerritJobs = jobs.findAll { job -> job.name.endsWith('gradle-gerrit') } !def projectNames =gerritJobs.collect { item -> item.triggers.values().find { it.class.simpleName =='GerritTrigger' }. gerritProjects[0].pattern } !if(jobGenerator){ projectNames.each { projectName -> boolean buildQueued = jobGenerator.scheduleBuild( 5, new Cause.UserIdCause(), new ParametersAction( new StringParameterValue( projectParamName,projectName) ) ) } }
![Page 20: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/20.jpg)
Example of Job Themes
• Continuos Integration Jobs • Gerrit Verification Jobs • Release Jobs • Privileged SCM Task Automation
![Page 21: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/21.jpg)
Summary
• Job DSL enables precise control
• Define parameterized Job Generator (the piano)
![Page 22: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/22.jpg)
Summary
• System Groovy Jobs
• automates calling job generator in bulk
(piano roll)
![Page 23: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/23.jpg)
![Page 24: Supercharged Configuration As Code · 2014-10-31 · Configuration As Code Bulk Updates with Job DSL and System Groovy. ... • jobdsl.JobUtilities methods! ... import jenkins.model.*](https://reader034.vdocument.in/reader034/viewer/2022050115/5f4c004783471570777fad16/html5/thumbnails/24.jpg)
Thank you
• Source Code at https://github.com/bealeaj1214/jenkins-juc-job-dsl-bulk-regeneration