jenkins job on two slaves?

蹲街弑〆低调 提交于 2019-12-07 08:52:26

问题


We need to be able to run a Jenkins job that consumes two slaves. (Or, two jobs, if we can guarantee that they run at the same time, and it's possible for at least one to know what the other is.) The situation is that we have a heavy weight application that we need to run tests against. The tests run on one machine, the application runs on another. It's not practical to have them on the same host.

Right now, we have a Jenkins job that uses a script to kick a dedicated application server up, install the correct version, the correct data, and then run the tests against it. That means that I can't use the dedicated application server to run other tasks, when there aren't the heavy weight testing going on. It also pretty much limits us to one loop. Being able to assign the app server dynamically would allow more of them.

There's clearly no way to do this in the core jenkins, but I'm hoping there's some plugin or hackery to make this possible. The current test build is a maven 2 job, but that's configurable, if we have to wrap it in something else. It's kicked off by the successful completion of another job, which could be changed to start two, or whatever else is required.


回答1:


Let me see if I understood the problem.

  1. You want to have dynamically choose a slave and start the App Server on it.

  2. When the App server is running on a Slave you do not want it to run any other job.

  3. But when the App server is not running, you want to use that Slave as any other Slave for other jobs.

One way out will be to label the Slaves. And use "Restrict where this project can be run" to make the App Server and the Test Suite run on the machines with Slave label.

Then in the slave nodes, put " # of executors" to 1. This will make sure that at anytime only one Job will run.

Next step will be to create a job to start the App Server and then kick off the Test job once the App Server start job is successful..

If your test job needs to know the server details of the machine where your App server is running then it becomes interesting.




回答2:


I just learned from that the simultaneous allocation of multiple slaves can be done nicely in a pipeline job, by nesting node clauses:

node('label1') {
    node('label2') {
        // your code here
        [...]
    }
}

See this question where Mateusz suggested that solution for a similar problem.



来源:https://stackoverflow.com/questions/21418480/jenkins-job-on-two-slaves

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!