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
210
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
410
Automate jenkins job creation
tonivdv
1
1.3k
How to start with docker
tonivdv
1
170
How we use docker for our development environment
tonivdv
5
360
Other Decks in Technology
See All in Technology
AIに頼りすぎない新人育成術
cuebic9bic
3
300
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
6.3k
10年以上続くプロダクトで今取り組んでること、取り組もうとしていること
sansantech
PRO
2
110
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
140
事業特性から逆算したインフラ設計
upsider_tech
0
110
Agent Development Kitで始める生成 AI エージェント実践開発
danishi
0
150
Backlog AI アシスタントが切り開く未来
vvatanabe
1
130
開発 × 生成AI × コミュニケーション:GENDAの開発現場で感じたコミュニケーションの変化 / GENDA Tech Talk #1
genda
0
220
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
140
生成AIによるデータサイエンスの変革
taka_aki
0
3k
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
710
Findy Freelance 利用シーン別AI活用例
ness
0
490
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Measuring & Analyzing Core Web Vitals
bluesmoon
8
550
The Invisible Side of Design
smashingmag
301
51k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
880
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Writing Fast Ruby
sferik
628
62k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
332
22k
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