Share
Embed
Automate jenkins job creation
Jenkins is a great CI tool. However when you need to manage a lot of jobs, this can quickly become a pain in the neck. What if you could automate all this? This talk will show you how to do this.
Toni Van de Voorde
September 28, 2017
Transcript
35 slides
-
Automate jenkins job creation Belgium Jenkins Area Meetup Toni Van
de Voorde – CTO @ Adlogix.eu -
Adlogix / Adsdaq / Buymedia Belgium Jenkins Area Meetup o
Microservice oriented o Different techno's o Lot’s of small feature branches Many jobs to manage !!! -
Job DSL Plugin Belgium Jenkins Area Meetup A groovy-based Domain
Specific Language for Jenkins Jobs -
Job DSL Plugin Belgium Jenkins Area Meetup Installation FROM jenkins/jenkins:lts-alpine
RUN /usr/local/bin/install-plugins.sh job-dsl -
Job DSL Plugin Belgium Jenkins Area Meetup Configuration 1. Create
new Freestyle project -
Job DSL Plugin Belgium Jenkins Area Meetup Configuration 5. Save
and execute the job -
Job DSL Plugin Belgium Jenkins Area Meetup Script Security Your
first execution failed right ??? o Script Approval o Sandboxing o Disable -
Job DSL Plugin Belgium Jenkins Area Meetup def gitUrl =
'git://github.com/jenkinsci/job-dsl-plugin.git’ job('demo1') { scm { git(gitUrl) } triggers { scm('*/15 * * * *') } steps { maven('-e clean test') } } Example demo1.groovy -
Job DSL Plugin Belgium Jenkins Area Meetup def gitUrl =
'git://github.com/jenkinsci/job-dsl-plugin.git’ job('demo1') { scm { git(gitUrl) } triggers { scm('*/15 * * * *') } steps { maven('-e clean test') } } Example demo1.groovy -
Job DSL Plugin Belgium Jenkins Area Meetup def gitUrl =
'git://github.com/jenkinsci/job-dsl-plugin.git’ job('demo1') { scm { git(gitUrl) } triggers { scm('*/15 * * * *') } steps { maven('-e clean test') } } Example demo1.groovy -
Job DSL Plugin Belgium Jenkins Area Meetup def gitUrl =
'git://github.com/jenkinsci/job-dsl-plugin.git’ job('demo1') { scm { git(gitUrl) } triggers { scm('*/15 * * * *') } steps { maven('-e clean test') } } Example demo1.groovy -
Job DSL Plugin Belgium Jenkins Area Meetup def gitUrl =
'git://github.com/jenkinsci/job-dsl-plugin.git’ job('demo1') { scm { git(gitUrl) } triggers { scm('*/15 * * * *') } steps { maven('-e clean test') } } Example demo1.groovy -
Job DSL Plugin Belgium Jenkins Area Meetup Community Driven o
> 1000 Pull Requests o 155 contributors o > 1000 stars -
Job DSL Plugin Belgium Jenkins Area Meetup Extend the DSL
Heeelp my plugin is not (yet) supported -
Job DSL Plugin Belgium Jenkins Area Meetup Generate Jobs/branch (1)
demo3.groovy def gitUrl = 'git://github.com/jenkinsci/job-dsl-plugin.git’ def branches = ['master','dev','hotfix'] branches.each { branch -> job("demo3-${branch}") { scm { git(gitUrl, branch) } } } -
Job DSL Plugin Belgium Jenkins Area Meetup Generate Jobs/branch (1)
demo3.groovy def gitUrl = 'git://github.com/jenkinsci/job-dsl-plugin.git’ def branches = ['master','dev','hotfix'] branches.each { branch -> job("demo3-${branch}") { scm { git(gitUrl, branch) } } } -
Job DSL Plugin Belgium Jenkins Area Meetup Generate Jobs/branch (1)
demo3.groovy def gitUrl = 'git://github.com/jenkinsci/job-dsl-plugin.git’ def branches = ['master','dev','hotfix'] branches.each { branch -> job("demo3-${branch}") { scm { git(gitUrl, branch) } } } -
Job DSL Plugin Belgium Jenkins Area Meetup Generate Jobs/branch (2)
demo4.groovy def project = 'Netflix/asgard’ def branchApi = new URL("https://api.github.com/repos/${project}/branches") def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader()) branches.each { def branchName = it.name def jobName = "${project}-${branchName}".replaceAll('/','-') job(jobName) { scm { git("https://github.com/${project}.git", branchName) } } } -
Job DSL Plugin Belgium Jenkins Area Meetup Generate Jobs/branch (3)
demo5.groovy def project = 'automate-jenkins-job-creation’ def repo = "https://[email protected]/tonivdv/${project}.git" Process proc1 = "git ls-remote -h ${repo}".execute() Process proc2 = 'sed s/.*refs\\/heads\\///g'.execute() Process all = proc1 | proc2 all.waitFor() def branches = "${all.in.text}".split('\\n') branches.each { … } -
Job DSL Plugin Belgium Jenkins Area Meetup Conditionals demo6.groovy branches.each
{ branch -> def myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } } -
Job DSL Plugin Belgium Jenkins Area Meetup Conditionals demo6.groovy branches.each
{ branch -> def myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } } -
Job DSL Plugin Belgium Jenkins Area Meetup Conditionals demo6.groovy branches.each
{ branch -> def myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } } -
Job DSL Plugin Belgium Jenkins Area Meetup Many other features
o Use any Java/Groovy libraries o Functions to reuse code o Create Views/Folders/Worflows/… -
Job DSL Plugin Belgium Jenkins Area Meetup Tips o Credential
Plugin o JobConfigHistory Plugin o Use the great API Viewer o (https://[jenkins-host]/plugin/job-dsl/api-viewer/index.html) o https://jenkinsci.github.io/job-dsl-plugin/ -
Job DSL Plugin Belgium Jenkins Area Meetup Tips o Commit
your DSL scripts to SCM o Don’t create jobs manually anymore :p -
Job DSL Plugin Belgium Jenkins Area Meetup References o Wiki
o https://github.com/jenkinsci/job-dsl-plugin/wiki o API Viewer o https://jenkinsci.github.io/job-dsl-plugin/ o Presentation demo files o https://bitbucket.org/tonivdv/automate-jenkins-job-creation -
Automate jenkins job creation Belgium Jenkins Area Meetup Toni Van
de Voorde [email protected] @tonivdv www.devexp.eu https://github.com/tonivdv Thank You Join our Team [email protected] Slides: http://bit.ly/2hCbkos demo-files: https://git.io/vds08