A Jenkins Plugin to support setting parameters in the build schedule. Using multiple cron lines each ending with a %
and some name=value
pairs you can schedule your parameterized build to run with different parameters at different times.
To install this plugin follow the Jenkins Plugin installation instructions.
After you save your project with some parameters (yes, save, then go back into the config page) you will see
Build periodically with parameters
in the Build Triggers section as shown here:
The cron line before the %
symbol is processed the same as the jenkins core Build periodically Schedule. Leave a space. Put in a %
. Then add the name=value
pairs you need for your project build parameters.
The idea was born from the need to use a different environment. To use a different TestNG configuration xml. In this example the env
parameter will be set to int during the build triggered at 15 after each hour. Then env
will be qa when the build runs at half past.
# lets run against the integration environment at 15 past the hour
15 * * * * %env=int
# run QA too
30 * * * * %env=qa
Yes, of course you can set multiple parameters. Lets say you have three parameters:
- furniture
- color
- name (with a default of fred)
Then you might want a schedule like the following:
# leave spaces where you want them around the parameters. They'll be trimmed.
# we let the build run with the default name
5 * * * * %furniture=chair;color=black
# now, let's override that default name and use Mr. Rubble.
10 * * * * %furniture=desk;color=yellow;name=barney
The parameterized cron trigger can be specified using the key parameterizedCron
under the triggers directive. The built in cron
trigger is still available and is independent of parameterizedCron
.
Example:
pipeline {
agent any
parameters {
string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?')
string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
}
triggers {
parameterizedCron('''
# leave spaces where you want them around the parameters. They'll be trimmed.
# we let the build run with the default name
*/2 * * * * %GREETING=Hola;PLANET=Pluto
*/3 * * * * %PLANET=Mars
''')
}
stages {
stage('Example') {
steps {
echo "${params.GREETING} ${params.PLANET}"
script { currentBuild.description = "${params.GREETING} ${params.PLANET}" }
}
}
}
}
One of the options of when directive is a triggeredBy
clause. When using the built in cron
trigger, you should use triggeredBy 'TimerTrigger'
. However, parameterizedCron
trigger is a different trigger from the built-in one, so the triggeredBy
should be updated accordingly:
pipeline {
agent any
parameters {
string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?')
string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
}
triggers {
parameterizedCron('''
# leave spaces where you want them around the parameters. They'll be trimmed.
# we let the build run with the default name
*/2 * * * * %GREETING=Hola;PLANET=Pluto
*/3 * * * * %PLANET=Mars
''')
stages {
stage('Example') {
when {
triggeredBy 'ParameterizedTimerTriggerCause'
}
steps {
echo 'This build was triggered by a `parameterizedCron` trigger'
}
}
}
}
properties([
parameters([
string(name: 'PLANET', defaultValue: 'Earth', description: 'Which planet are we on?'),
string(name: 'GREETING', defaultValue: 'Hello', description: 'How shall we greet?')
]),
pipelineTriggers([
parameterizedCron('''
*/2 * * * * %GREETING=Hola;PLANET=Pluto
*/3 * * * * %PLANET=Mars
''')
])
])