Jenkins: How to set a schedule for a parametrized job? - jenkins

I want to set a schedule for a parametrized Jenkins job to start in different time with different parameters, but I can not find the correct syntax for this. I would like to have something like that:
30 1 * * * % VAR1=VALUE1, VAR2=VALUE2
30 2 * * * % VAR1=VALUE3, VAR2=VALUE4
How to do it correctly?

The answer is in the plugin README:
parameterized-scheduler-plugin README.md
# 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
Not explicitly documented, but the example and the code show it to be PAIR_SEPARATOR= ";"
See also this "bug" - JENKINS-22129 and JENKINS--53220 and more

Related

"H 5 * * 7" cron in Jenkins groovy script

I am trying to understand when this trigger runs in Jenkins groovy script. Seems to me that Jenkins groovy script has some DSL for cron. Does anyone know when this cron job is triggered?
triggers {
cron('H 5 * * 7')
}
In H 5 * * 7 the H means hash. You can have digit in the first place, but H allows to distribute the load better.
H = minute when less load is expected, Jenkins will propose it the first time, after that it will stay more or less the same, if there are available agents to handle it.
5 = hour,
* = any value (every day),
* = any value (every month),
7 = 7th day of week (Sunday).
Reference:
Spread load evenly by using ‘H * * * *’ rather than ‘5 * * * *’
You can test it using the CRONTab tester.
This means to start at 5:00 on every sunday
https://crontab.guru/#0_5_*_*_7

How to schedule a Jenkins job every 3 hours but exclude a certain time frame

I want to schedule a jenkins job every 3 hours but exclude 6 o'clock. Something like the following statement which unfortunately is not possible in Jenkins:
H (0-5,7-23)/3 * * *
If I use the following statement it is treated separately:
H 0-5/3,7-23/3 * * *
Hence, the job starts at 0 o'clock even if the previous job was executed at 22 o'clock.
The worst solution would be to specify all times manually. Is there any better way?
You will need to explicitly set the hours.
So if you want to skip 6 PM then Jenkins corn will be
H 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23 * * *
and if you want skip 6 AM then
H 0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * *

jenkins cron: run every 3rd minute, starting at 1

I want to set Jenkins to run a job every 3rd minute, but not starting at 0. Basically, I have 3 jobs and I want to cycle through them each minute.
The first job I can run every 3rd minute with */3 * * * *. But the second I tried 1/3 * * * * and it failed with hudson.remoting.ProxyException: line 1:2: unexpected token: /
How do I write this expression?
I think you're looking for:
job 1: 0-57/3 * * * *
job 2: 1-58/3 * * * *
job 3: 2-59/3 * * * *
Think of the cron minute entry as meaning "range/step" (or, "run this every step minutes over the minute range start-end)
Reference: I was able to figure it out from this excellent answer, which includes some helpful related links and a more in-depth explanation.

Active Choice Reactive Parameters with Parameterized Scheduler

I have some parameterized build in Jenkins with several Active Choice Reactive Parameters: par1, par2.
par1 is defined by combo, and par2 value depends on par1:
switch (par1) {
case 'value1': return 'test1'
case 'value2': return 'test2'
default: return 'test'
}
It works fine for manual trigger, but fails if I try to use parameterized shedule trigger:
H * * * * %par1=value1
Is it possible to solve this issue somehow?
Your input for periodic is supposed to run per hour (1).
Change this H * * * * %par1=value1 to either * * * * * every minute OR H/1 * * * * (1 hour) or H/2 * * * * (every 2 minutes). yea, it's kind of confusing when you use 1 it makes it one hour vs 1 minute (with H/1)
Also, make sure your par2 (Groovy code section within Active choice reactive parameter) is handling cases where par1 is not just a single value (test1) i.e. it can be test1,test2,test3,... when a user would have selected multiple values for par2 parameter (if it is a Multiple Select type).

Schedule nightly 22-03 build using Jenkins and H, the "hash symbol"

A build that takes about three hours to complete needs to be scheduled for nightly building outside office hours: not sooner than 22:00 and not later than 3:59 next day.
I'd also like to use the "H symbol" to avoid collision with future nightly builds. From in-line help in Jenkins:
To allow periodically scheduled tasks to produce even load on the system, the symbol H (for “hash”) should be used wherever possible. For example, using 0 0 * * * for a dozen daily jobs will cause a large spike at midnight. In contrast, using H H * * * would still execute each job once a day, but not all at the same time, better using limited resources.
(How) can I schedule this using Jenkins? What I've tried was all considered invalid by Jenkins:
H H(22,23,0,1,2,3) * * *
Invalid input: "H H(22,23,0,1,2,3) * * *": line 1:7: expecting "-", found ','
H H22,23,0,1,2,3 * * *
Invalid input: "H H22,23,0,1,2,3 * * *": line 1:4: unexpected token: 22
H H(22-3) * * *
Invalid input: "H H(22-3) * * *": line 1:9: 1 is an invalid value. Must be within 1
and -18
Is it possible to achieve this without using plug-ins?
I think the closest you will get is to use:
H H(0-3) * * * This will run at some point between 0:00 and 3:59
#midnight This will run at some point between 0:00 and 2:59
The H(4-8) construct only works if the second items is larger then the first.
But you might as well fill in the hour yourself. Jenkins actually never changes the hour the jobs runs once it is set. It will basically create some random hour once you save the job and always run the job at that particular time.
Of course, you can also file a bug report or feature request that you should be able to specify this as H(22-3) or better, fix the code and submit a patch ;)
There is no direct support to write the expression like this, but since there is timezone support (now), you can work around this.
# DONT COPY PASTE - THIS DOESNT WORK!
# This is what we would like to write, but is not supported
H H(22-3) * * *
Above expression means we want to build somewhen between 22 PM and 3 AM, this is a 5 hour period, so we could write:
# Assuming we're in GMT+2 we can just shift the timezone
# so 22-03 becomes 10-15 wich is 12 hours earlier so the
# timezone is GMT-10
TZ=Etc/GMT-10
H H(10-15) * * *
I found this workaround in the comments of JENKINS-18313
UPDATE:
There is currently a bug JENKINS-57702 and the timezone GMT-XX is not evaluated correctly. A workaround is to use a equivalent timezone, in this example the one for Hawaii:
TZ=US/Hawaii
H H(10-15) * * *

Resources