Jenkins 2.0

Mitä, milloin

jyrki.puttonen@symbio.com / @jyrkiput

Yleistä

Jenkins 2.0 ominaisuudet

Skriptaaminen

Demo dockerin avulla

Uudet ominaisuudet

  • Helpompi käyttöönotto
  • Uusi käyttöliittymä
  • Täysin taaksepäin yhteensopiva
  • Pipeline as Code

Helpompi käyttöönotto

Valikoima plugineja valmiina

Ensimmäisen jobin luominen helpompaa

Helppo testata Dockerin avulla

docker run -p 8060:8080 --name jenkins jenkinsci/jenkins:2.0-alpha-2

http://localhost:8060/

Paranneltu käyttöliittymä

Pieniä, käyttöä helpottavia parannuksia

Konfigurointi sivu muuttunut

Täysin taaksepäin yhteensopiva

Ei mitään mullistavia muutoksia

Pipeline as Code

Plugin, joka on ollut olemassa jo pitkään nimellä Workflow

Tukee pitkiä, monivaiheisia prosesseja, jotka säilyvät käynnistyksien yli

Voidaan määrittää Jenkinsfilessä tai UI:ssa

Julkaisu

Lisätietoja https://jenkins-ci.org/2.0/

Alpha buildit saatavilla

Release muutaman kuukauden sisään

Skriptattava Jenkins

Pipeline as Code

Pipeline as Code

Voi kirjoittaa joko suoraan Jenkinssiin, tai SCM:n Jenkinsfile:n

http://localhost:8060/newJob, Pipeline tyypiksi, Pipeline tab


node('master') {
  echo "hello"
}
				  

Tallenna ja buildaa

Pipeline as Code, SCM checkout


node('master') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
}
					

Pipeline as Code, SCM checkout, Gradle build&test


node('master') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew test"
}
					

Pipeline as Code, Stages


stage 'Build'
node('master') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew build"
}
stage 'Test'
node('master') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew test"
}
					

Pipeline as Code, Remotes

Remote lisättävä käsin http://192.168.179.53:8060/computer/new

  • Permanent agent
  • Name: remote
  • Remote root directory: /data/jenkins
  • Launch Method: Launch agents via Java Web Start

docker run --rm -ti --link jenkins:master java:8-jdk /bin/bash -c "curl http://master:8080/jnlpJars/slave.jar -s -o /slave.jar && java -jar /slave.jar -jnlpUrl http://master:8080/computer/remote/slave-agent.jnlp"

One liners ftw!

Pipeline as Code, Remotes


stage 'Build'
node('master') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew build"
}
stage 'Test'
node {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew test"
}
stage 'Package'
node('remote') {
	git url: 'https://github.com/jyrkiput/jenkins-demo'
	sh "./gradlew jar"
}
					

Pipeline as Code, Jenkinsfile

Konfiguroitava valmiiksi, scm, polling, etc

Annetaan polku Jenkinsfileen, jossa on Pipeline määritelty

Pipeline from SCM

https://github.com/jyrkiput/jenkins-demo/blob/master/Jenkinsfile

Pipeline as Code, syntaksi

Groovy DSL

Voi looppailla, tehdä if -lauseita, vaikka mitä

Esimerkkejä https://github.com/jenkinsci/pipeline-examples

Pipeline as Code, Jaetut kirjastot

Voi tehdä kirjastoja joita voi uudelleenkäyttää

Tallennetaan Jenkinsin hallinnoimaan git -repoon, http://localhost:8060/workflowLibs.git

Kirjasto


// src/org/foo/Zot.groovy
package org.foo;

def checkOutFrom(repo) {
  git url: "git@github.com:jenkinsci/${repo}"
}
					

Pipeline koodi


def z = new org.foo.Zot()
z.checkOutFrom(repo)
					

Skriptattava Jenkins

Job DSL

Erot Pipelineen

Tarvitsee oman "Seed" -jobin

Luo uusia jobeja

Paljon laajempi DSL

Demo

Pluginit asennettava JobDSL, Gradle, Parameterized Trigger plugin

Luo uusi Freestyle -job

Build -> Process Job DSLs -> Use the provided DSL script


def projectName = "job-dsl"
folder(projectName)

freeStyleJob("${projectName}/Build") {
  label("master")
  scm {
        git {
            remote {
                url("https://github.com/jyrkiput/jenkins-demo")
            }
        }
    }
    steps {
        gradle {
            tasks("build")
        }
        downstreamParameterized {
            trigger("$projectName/Test") {
                parameters {
                    currentBuild()
                }
            }
        }
    }
}

freeStyleJob("${projectName}/Test") {
  label("master")
  scm {
        git {
            remote {
                url("https://github.com/jyrkiput/jenkins-demo")
            }
        }
    }

    steps {
        gradle {
            tasks("test")
        }
    }
}
				

Kiitoksia mielenkiinnosta

Kysymyksiä, kommentteja?