I have three jobs that I would like to serialize in Jenkins.
They should run as a block after a job that triggers them:
Job1 -> [A,B,C]
Job2 -> [A,B,C]
Right now when Job1 is triggered twice, I get the following behavior:
Order that jobs are run now:
-Job1
-Job2
-A
-B
-(job A or C)
-Order is not guaranteed after this
What I would like to see is:
Order that jobs are run:
-Job1
-Job2
-A (from Job1)
-B (from Job1)
-C (from Job1)
------------
-A (from Job2)
-B (from Job2)
-C (from Job2)
So, this is the solution I found:
Using the Jenkins Parameterized Trigger plug-in, an extra Build step is available:
Trigger/call builds on other projects
On Job1 add three build triggers:
Projects to Build: JobA
[x] Block until the triggered projects finish their builds
Projects to Build: JobB
[x] Block until the triggered projects finish their builds
Projects to Build: JobC
[x] Block until the triggered projects finish their builds
Do the same on Job2.
Add a lock that is shared between the two Jobs 1 and 2.
This way when Job 1 and Job 2 are triggered they will wait for each other. And each Job won't be marked as passed until all the Jobs A->B>C run and are successful.
More options are available to control the return value of each build step , whether it should depend on the result of the triggered job or continue regardless of the result.
Fail this build step if the triggered build is worse or equal to
Mark this build as failure if the triggered build is worse or equal to
Mark this build as unstable if the triggered build is worse or equal to
Have a look at the Jenkins Locks and Latches plugin.
I cannot think of a way to do exactly what you want in Jenkins. Maybe Jenkins is not the tool for you?
Another way to approach this would be: Your question actually presents a solution to your problem (a bunch of jobs and their execution order) and you are asking how to implement it.
Would you be willing to explain what is your goal, what is it you want to achieve? Maybe some Jenkins expert can then tell you how you can do it using Jenkins.
(A) Setup a machine -> (B) Run all the Tests once
On the nightly run:
to:
(A) Setup a machine -> (B) Run all the Tests once -> (C) Run all the Tests several times
Anas Alkhatib 2012-04-04 21:10
If there was a way to create a job that calls Job A,B,C in order and doesn't succeed until all are finished, then that job could acquire the lock - Anas Alkhatib 2012-04-04 03:15