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
420
Automate jenkins job creation
tonivdv
1
1.3k
How to start with docker
tonivdv
1
180
How we use docker for our development environment
tonivdv
5
370
Other Decks in Technology
See All in Technology
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
860
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3k
リセラー企業のテクサポ担当が考える、生成 AI 時代のトラブルシュート 2025
kazzpapa3
1
360
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
170
難しいセキュリティ用語をわかりやすくしてみた
yuta3110
0
200
20251007: What happens when multi-agent systems become larger? (CyberAgent, Inc)
ornew
1
300
Wasmのエコシステムを使った ツール作成方法
askua
0
190
2025-10-09_プロジェクトマネージャーAIチャンス
taukami
0
150
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
110
「改善」ってこれでいいんだっけ?
ukigmo_hiro
0
260
LLMアプリの地上戦開発計画と運用実践 / 2025.10.15 GPU UNITE 2025
smiyawaki0820
1
590
【Kaigi on Rails 事後勉強会LT】MeはどうしてGirlsに? 私とRubyを繋いだRail(s)
joyfrommasara
0
270
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The World Runs on Bad Software
bkeepers
PRO
72
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Mobile First: as difficult as doing things right
swwweet
224
10k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
The Invisible Side of Design
smashingmag
302
51k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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