Jenkinspipe道和Docker插件 – 并发构build在独特的代理上

我使用Jenkins版本2.7.1和Pipeline套件来实现Jenkins文件中的pipe道以及Docker插件。 我的目标是并行执行多个项目构build,每个项目构build在其专用容器中运行。 我的Jenkinsfile如下所示:

node('docker-agent') { stage('Checkout') { checkout scm } stage('Setup') { build(job: 'Some External Job', node: env.NODE_NAME, workspace: env.WORKSPACE) } } 

我有一个要求调用一个外部工作,但我需要这个在checkout scm步骤签出代码,因此nodeworkspace参数在同一个工作区执行。 我明白,通过在一个node块中包装build调用有效地浪费了一个执行器,但是我很好,因为代理是Docker云上的一个容器,并不是真的在浪费任何资源。

我的方法的一个问题是,这个项目的另一个实例可能会在两个阶段之间的时间间隔内从另一个运行实例中偷走执行者。

我如何确保(1)项目构build可以同时运行,但是(2)每个构build运行在由docker-agent标记的代理的新实例上?

我已经尝试了locking插件,但是一个新的构build将只是等待获取现有代理的locking,而不是旋转自己的代理。

为了防止在同一个代理上运行其他构build,将Docker云环境中的每个代理的执行程序数量限制为1(这是为该标签configuration泊坞窗时的设置)。 这将需要一个新的容器来启动每个执行者。

也就是说,我不会devise这样的pipe道。 相反,我会使用stash和unstash复制你的签出和其他节点之间的小工件,这样你就可以暂停执行,而不需要让一个节点继续运行。