如果新构建在管道中等待,如何强制Jenkins跳过下游作业?

时间:2012-10-10 18:25:59

标签: jenkins

我在Jenkins的构建管道分为三个部分:

  1. 构建代码
  2. 将代码部署到环境
  3. 运行自动功能测试
  4. 我已经进行了设置,以便可以发生并发构建,如果#2或#3当前正在为另一个构建运行,构建管道将阻止构建进入#2。

    我希望能够做的是设置Jenkins以便在有多个构建等待时进行处理,并且#2和#3完成,因为只有LATEST构建才能进入#2和#3。

    有没有办法开箱即用?如果您有“持续交付”一书,我正在尝试做的是实现p上的内容。 118 - p。 119

3 个答案:

答案 0 :(得分:14)

应在高级项目选项

下尝试其中之一
  • 上游项目建设时阻止构建
    (应确保不会导致步骤2和3陷入队列)

  • 下游项目建设时的阻止构建
    (我知道这听起来与您的请求相反,但实际结果是您积累了更改到单个构建周期,防止额外运行)

如果这导致不需要的构建堆积,
请查看以下有助于您的链接 清空队列或杀死正在运行的作业:

干杯

答案 1 :(得分:0)

Workflow插件允许您将整个管道编写为一个脚本。在这种情况下,stage步骤可用于控制访问:

stage 'build'
// any number of builds get here
stage name: 'deployAndTest', concurrency: 1
// only the last to build successfully enters here

(出于可视化目的,JENKINS-29892可让您在deploytest阶段之间标记边界。)

答案 2 :(得分:0)

“阻止上游”或“阻塞下游”的问题在于你总是阻止可能正在工作的东西。

如果你使用“git”,你可以沿着这些方向做点什么 - 这正是我正在做的......

我使用跟踪分支指向任何步骤的最新完成构建作业,命名如下:<branch>-latest-<step>。因此,如果您基于master运行“构建”步骤,则会获得master-latest-build。将此分支移动到构建脚本的末尾非常容易,只需运行:git branch -f <name> HEAD,然后执行推送。

然后,我将下游作业从该跟踪分支触发。这样,所有作业都松散耦合,无论上游作业产生什么,都会做正确的事情,而不依赖于上游作业当前的工作。

除此之外,如果还标记了构建,下游作业可以检索标记并将其重新用作构建名称,以便您轻松关联各种运行。

如果管道的步长差异很大,这是非常有效的 - 特别是当您的下游步骤比上游步骤花费的时间长得多时,这在我的世界是常态,因为下游测试包括一整套性能和集成测试...

相关问题