Jenkins Pipeline& Docker插件 - 并发构建于独特的代理

时间:2017-03-01 15:18:15

标签: docker jenkins jenkins-pipeline agent

我正在使用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步骤已检出代码的同一工作区上执行此操作,因此nodeworkspace参数。我理解通过在build块中包含node调用有效地浪费了执行者,但我很好,因为代理是Docker Cloud上的容器并且实际上并没有浪费任何资源

我的方法的一个问题是,这个项目构建的另一个实例可能会在两个阶段之间的时间间隔内从不同的运行实例中窃取执行程序。

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

我尝试过Locking插件,但是新版本只会等待获取现有代理的锁定而不是自动代理。

1 个答案:

答案 0 :(得分:0)

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

那就是说,我不会设计像这样的管道。相反,我会使用stashunstash复制您的结帐以及节点之间的任何其他小工件,以便您可以暂停执行而无需保持节点运行。