Jenkins : One Jobs to Create them All [EN]
Today, I will talk about a Jenkins plugin called « Jenkins Job DSL. »
It’a a plugin that allow you to create jenkins jobs from a jenkins job !
You just have to create a grovvy script to describe your job.
Install the Job DSL Plugin on Jenkins
To install the plugin, download the latest release here, then install it (Administration > Plugin management)
Create a « seed » job
The next step is to create a seed job. For this, create a new « free-style » job, and select :
- Source code : clone your git repository where your DSL groovy scripts will be stored.
- Build : Select « process Job DSL » build type.
- Look on filesystem : « dsl/*.groovy »
Create Groovy Jobs
Now, create a git repository whith some groovy scripts to define all your jenkins jobs:
Here is an example of groovy script to deploy projects with ansible :
job('ansible_deploy') {
description('Ansible deploy')
wrappers {
colorizeOutput()
preBuildCleanup()
}
parameters {
stringParam('GIT_REPO', 'https://git.company.com/project/ansible.git', 'Nom du repo git')
stringParam('GIT_BRANCH', 'master', 'Git branch')
stringParam('ANSIBLE_INVENTORY', 'inventory/env/hosts', 'Ansible inventory file')
stringParam('ANSIBLE_TAGS', '', 'Ansible tags')
stringParam('ANSIBLE_LIMITS', '', 'Ansible limits')
stringParam('ANSIBLE_USER', 'deploy', 'Ansible user')
stringParam('ANSIBLE_EXTRA_VARS', '', 'Ansible extra vars')
}
environmentVariables {
keepSystemVariables(true)
keepBuildVariables(true)
}
scm {
git($GIT_REPO, $GIT_BRANCH)
}
steps {
shell(readFileFromWorkspace('shell/ansible_deploy.sh'))
}
}
This job will clone a git repo where ansible roles and playbooks are stored.
Then the shell script will execute the ansible-playbook command with the corrects options according to the specified parameters in the job.
The script can also install additional roles with ansible galaxy
ansible-galaxy install -r requirements.yml ansible-playbook -i $ANSIBLE_INVENTORY -u $ANSIBLE_USER -e "$ANSIBLE_EXTRA_VARS" -l "$ANSIBLE_LIMITS" -t "$ANSIBLE_TAGS" play.yml
Now you can create all your jobs with groovy script to do whatever you want ! (build maven stuff, deploy with ansible, package projects, generate documentation, etc..)
The documentation is very complete :
https://github.com/jenkinsci/job-dsl-plugin/wiki
https://jenkinsci.github.io/job-dsl-plugin/#path/job
Run the Seed Job
Once all your jobs scripts are pushed to your « jenkins-dsl-jobs » git repository, you can run the seed job.
The advantages are :
- All your jenkins jobs are versionned, no more broken job because someone have modified it
- Your Jenkins users don’t need write permission on jenkins jobs !


