Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Automate jenkins job creation (#phpbnl18)

Automate jenkins job creation (#phpbnl18)

Improved version given at phpbnl18

Toni Van de Voorde

January 27, 2018
Tweet

More Decks by Toni Van de Voorde

Other Decks in Technology

Transcript

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

    View full-size slide

  2. Why Jenkins ?
    o Free
    o Open-Source
    o Customization
    o Plugin system
    o Full control of the system

    View full-size slide

  3. But
    o Time needed for
    configurations /
    customization

    View full-size slide

  4. Adsdaq
    o Microservice
    oriented
    o Different techno's
    o Lot’s of small
    feature branches
    Many
    jobs
    to manage
    !!!

    View full-size slide

  5. The solution
    Job DSL Plugin

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. Job DSL Plugin
    Configuration
    2. Add SCM

    View full-size slide

  10. Job DSL Plugin
    Configuration
    3. Add build step

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. Job DSL Plugin
    Script Security
    Your first execution failed right ???
    o Script Approval
    o Sandboxing
    o Disable

    View full-size slide

  14. Job DSL Plugin
    Script Security
    Script Approval

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  20. Job DSL Plugin
    Currently supports
    up to 190
    Plugins

    View full-size slide

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

    View full-size slide

  22. Job DSL Plugin
    Extend the DSL
    Heeelp my plugin is not (yet) supported

    View full-size slide

  23. Job DSL Plugin
    Extend the DSL
    demo2.groovy

    View full-size slide

  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)
    }
    }
    }

    View full-size slide

  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)
    }
    }
    }

    View full-size slide

  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)
    }
    }
    }

    View full-size slide

  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)
    }
    }
    }

    View full-size slide

  28. Job DSL Plugin
    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 {

    }

    View full-size slide

  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
    }
    }

    View full-size slide

  30. Job DSL Plugin
    Generate Jobs/branch (5)
    demo5bis.groovy
    import utilities.GitUtils
    def project = 'automate-jenkins-job-creation’
    def repo = https://[email protected]/tonivdv/${project}.git
    def branches = GitUtils.getRemoteBranches(repo, out)
    folder('demo5bis')
    branches.each {

    }

    View full-size slide

  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 {
    ...
    }
    }

    View full-size slide

  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 {
    ...
    }
    }

    View full-size slide

  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 {
    ...
    }
    }

    View full-size slide

  34. Job DSL Plugin
    Many other features
    o Use any Java/Groovy libraries
    o Functions to reuse code
    o Create Views/Folders/Worflows/…

    View full-size slide

  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/

    View full-size slide

  36. Job DSL Plugin
    Tips
    o Commit your DSL scripts to SCM
    o Don’t create jobs manually anymore :p

    View full-size slide

  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

    View full-size slide

  38. Automate jenkins job creation
    Questions?

    View full-size slide

  39. Automate jenkins job creation
    Toni Van de Voorde
    [email protected]
    @tonivdv
    www.devexp.eu
    https://github.com/tonivdv
    Thank You
    Join our Team
    [email protected]
    demo-files:
    https://git.io/vds08
    Rate this talk:
    https://joind.in/talk/26f3d

    View full-size slide