我正在使用Jenkins版本2.7.1与Pipeline插件套件一起在Jenkins文件中实现一个管道,以及Docker插件。我的目标是并行执行多个项目构建,每个项目构建都在自己的专用容器中运行。我的Jenkins文件看起来像:
node('docker-agent') {
stage('Checkout') {
checkout scm
}
stage('Setup') {
build(job: 'Some External Job', node: env.NODE_NAME, workspace: env.WORKSPACE)
}
}
我需要调用外部作业,但我需要在checkout scm
步骤已检出代码的同一工作区上执行此操作,因此node
和workspace
参数。我理解通过在build
块中包含node
调用有效地浪费了执行者,但我很好,因为代理是Docker Cloud上的容器并且实际上并没有浪费任何资源
我的方法的一个问题是,这个项目构建的另一个实例可能会在两个阶段之间的时间间隔内从不同的运行实例中窃取执行程序。
我如何基本上确保(1)项目构建可以同时运行,但(2)每个构建都在docker-agent
标记的代理的新实例上运行?
我尝试过Locking插件,但是新版本只会等待获取现有代理的锁定而不是自动代理。