Automate jenkins job creation (#phpbnl18)

Automate jenkins job creation (#phpbnl18)

Improved version given at phpbnl18

8b3f69dcdbfc477777ab524c316168c1?s=128

Toni Van de Voorde

January 27, 2018
Tweet

Transcript

  1. Automate jenkins job creation Toni Van de Voorde – CTO

    @ Adsdaq.eu
  2. Why Jenkins ? o Free o Open-Source o Customization o

    Plugin system o Full control of the system
  3. But o Time needed for configurations / customization

  4. Adsdaq o Microservice oriented o Different techno's o Lot’s of

    small feature branches Many jobs to manage !!!
  5. The solution Job DSL Plugin

  6. Job DSL Plugin A groovy-based Domain Specific Language for Jenkins

    Jobs
  7. Job DSL Plugin Installation FROM jenkins/jenkins:lts-alpine RUN /usr/local/bin/install-plugins.sh job-dsl

  8. Job DSL Plugin Configuration 1. Create new Freestyle project

  9. Job DSL Plugin Configuration 2. Add SCM

  10. Job DSL Plugin Configuration 3. Add build step

  11. Job DSL Plugin Configuration 4. Configure the build step

  12. Job DSL Plugin Configuration 5. Save and execute the job

  13. Job DSL Plugin Script Security Your first execution failed right

    ??? o Script Approval o Sandboxing o Disable
  14. Job DSL Plugin Script Security Script Approval

  15. Job DSL Plugin 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
  16. Job DSL Plugin 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
  17. Job DSL Plugin 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
  18. Job DSL Plugin 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
  19. Job DSL Plugin 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
  20. Job DSL Plugin Currently supports up to 190 Plugins

  21. Job DSL Plugin Community Driven o > 1000 Pull Requests

    o 155 contributors o > 1000 stars
  22. Job DSL Plugin Extend the DSL Heeelp my plugin is

    not (yet) supported
  23. Job DSL Plugin Extend the DSL demo2.groovy

  24. Job DSL Plugin 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) } } }
  25. Job DSL Plugin 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) } } }
  26. Job DSL Plugin 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) } } }
  27. Job DSL Plugin 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) } } }
  28. Job DSL Plugin Generate Jobs/branch (3) demo5.groovy def project =

    'automate-jenkins-job-creation’ def repo = "https://tonivdv@bitbucket.org/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 { … }
  29. Job DSL Plugin Generate Jobs/branch (4) demo5bis.groovy package utilities public

    class GitUtils { public static String[] getRemoteBranches(def repoUrl, def out) { Process proc1 = "git ls-remote -h ${repoUrl}".execute() Process proc2 = 'sed s/.*refs\\/heads\\///g'.execute() Process all = proc1 | proc2 all.waitFor() out.println "### DEBUG: Begin ###" ... out.println "### DEBUG: End ###" def branches = "${all.in.text}".split('\\n') return branches } }
  30. Job DSL Plugin Generate Jobs/branch (5) demo5bis.groovy import utilities.GitUtils def

    project = 'automate-jenkins-job-creation’ def repo = https://tonivdv@bitbucket.org/tonivdv/${project}.git def branches = GitUtils.getRemoteBranches(repo, out) folder('demo5bis') branches.each { … }
  31. Job DSL Plugin Conditionals demo6.groovy branches.each { branch -> def

    myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } }
  32. Job DSL Plugin Conditionals demo6.groovy branches.each { branch -> def

    myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } }
  33. Job DSL Plugin Conditionals demo6.groovy branches.each { branch -> def

    myjob = job(jobName) { .. } if (branch == "master") { myjob.with { steps { maven('-e deploy clean test') } } } else { ... } }
  34. Job DSL Plugin Many other features o Use any Java/Groovy

    libraries o Functions to reuse code o Create Views/Folders/Worflows/…
  35. Job DSL Plugin 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/
  36. Job DSL Plugin Tips o Commit your DSL scripts to

    SCM o Don’t create jobs manually anymore :p
  37. Job DSL Plugin 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://github.com/tonivdv/automate-jenkins-job-creation
  38. Automate jenkins job creation Questions?

  39. Automate jenkins job creation Toni Van de Voorde toni.vdv@gmail.com @tonivdv

    www.devexp.eu https://github.com/tonivdv Thank You Join our Team info@adsdaq.eu demo-files: https://git.io/vds08 Rate this talk: https://joind.in/talk/26f3d