Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Automate jenkins job creation (#phpbnl18)
Search
Toni Van de Voorde
January 27, 2018
Technology
1
190
Automate jenkins job creation (#phpbnl18)
Improved version given at phpbnl18
Toni Van de Voorde
January 27, 2018
Tweet
Share
More Decks by Toni Van de Voorde
See All by Toni Van de Voorde
Jenkins Automation
tonivdv
0
390
Automate jenkins job creation
tonivdv
1
1.3k
How to start with docker
tonivdv
1
150
How we use docker for our development environment
tonivdv
5
340
Other Decks in Technology
See All in Technology
Scala meets WebAssembly
tanishiking
0
150
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
12k
やっぱり余白が大切だった話
kakehashi
PRO
7
2.3k
Go Modulesの仕組み Bundler(Ruby)との比較を添えて
daisuketakeda
0
1.8k
組織に持ち込む脅威モデリング
nikinusu
1
520
エンジニアの健康管理術 / Engineer Health Management Techniques
y_sone
8
7.2k
エンジニアのキャリアパスと、 その中で自分が大切にしていること
noteinc
4
3.5k
ランチの間に GitHub Copilot Agent が仕事を終わらせてくれた話
bicstone
2
350
単一の深層学習モデルによる不確実性の定量化の紹介 ~その予測結果正しいですか?~
ftakahashi
PRO
2
170
x86-64 Assembly Essentials
latte72
4
1.2k
組織拡大でカルチャー崩壊を防ぐためにできること
urahiroshi
0
120
マネコン操作いらず! TerraformでAWSインフラのコーディングに入門しよう
minorun365
PRO
5
1.5k
Featured
See All Featured
Side Projects
sachag
452
42k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
11
570
Bash Introduction
62gerente
611
210k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Gamification - CAS2011
davidbonilla
80
5.2k
Git: the NoSQL Database
bkeepers
PRO
429
65k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
4 Signs Your Business is Dying
shpigford
183
22k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Practical Orchestrator
shlominoach
186
10k
Transcript
Automate jenkins job creation Toni Van de Voorde – CTO
@ Adsdaq.eu
Why Jenkins ? o Free o Open-Source o Customization o
Plugin system o Full control of the system
But o Time needed for configurations / customization
Adsdaq o Microservice oriented o Different techno's o Lot’s of
small feature branches Many jobs to manage !!!
The solution Job DSL Plugin
Job DSL Plugin A groovy-based Domain Specific Language for Jenkins
Jobs
Job DSL Plugin Installation FROM jenkins/jenkins:lts-alpine RUN /usr/local/bin/install-plugins.sh job-dsl
Job DSL Plugin Configuration 1. Create new Freestyle project
Job DSL Plugin Configuration 2. Add SCM
Job DSL Plugin Configuration 3. Add build step
Job DSL Plugin Configuration 4. Configure the build step
Job DSL Plugin Configuration 5. Save and execute the job
Job DSL Plugin Script Security Your first execution failed right
??? o Script Approval o Sandboxing o Disable
Job DSL Plugin Script Security Script Approval
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
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
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
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
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
Job DSL Plugin Currently supports up to 190 Plugins
Job DSL Plugin Community Driven o > 1000 Pull Requests
o 155 contributors o > 1000 stars
Job DSL Plugin Extend the DSL Heeelp my plugin is
not (yet) supported
Job DSL Plugin Extend the DSL demo2.groovy
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) } } }
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) } } }
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) } } }
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) } } }
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 { … }
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 } }
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 { … }
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 { ... } }
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 { ... } }
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 { ... } }
Job DSL Plugin Many other features o Use any Java/Groovy
libraries o Functions to reuse code o Create Views/Folders/Worflows/…
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/
Job DSL Plugin Tips o Commit your DSL scripts to
SCM o Don’t create jobs manually anymore :p
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
Automate jenkins job creation Questions?
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