我在Jenkins的构建管道分为三个部分:
我已经进行了设置,以便可以发生并发构建,如果#2或#3当前正在为另一个构建运行,构建管道将阻止构建进入#2。
我希望能够做的是设置Jenkins以便在有多个构建等待时进行处理,并且#2和#3完成,因为只有LATEST构建才能进入#2和#3。
有没有办法开箱即用?如果您有“持续交付”一书,我正在尝试做的是实现p上的内容。 118 - p。 119
答案 0 :(得分:14)
应在高级项目选项:
下尝试其中之一 上游项目建设时阻止构建
(应确保不会导致步骤2和3陷入队列)
下游项目建设时的阻止构建
(我知道这听起来与您的请求相反,但实际结果是您积累了更改到单个构建周期,防止额外运行)
如果这导致不需要的构建堆积,
请查看以下有助于您的链接
清空队列或杀死正在运行的作业:
Stopping Jenkins job in case newer one is started(malenkiy_scot)
Kill All the Builds(由Kohsuke Kawaguchi提供)
import hudson.model.*;
Hudson.instance.computers.each { c ->
c.executors.each { e ->
e.interrupt();
}
}
干杯
答案 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可让您在deploy
和test
阶段之间标记边界。)
答案 2 :(得分:0)
“阻止上游”或“阻塞下游”的问题在于你总是阻止可能正在工作的东西。
如果你使用“git”,你可以沿着这些方向做点什么 - 这正是我正在做的......
我使用跟踪分支指向任何步骤的最新完成构建作业,命名如下:<branch>-latest-<step>
。因此,如果您基于master运行“构建”步骤,则会获得master-latest-build
。将此分支移动到构建脚本的末尾非常容易,只需运行:git branch -f <name> HEAD
,然后执行推送。
除此之外,如果还标记了构建,下游作业可以检索标记并将其重新用作构建名称,以便您轻松关联各种运行。
如果管道的步长差异很大,这是非常有效的 - 特别是当您的下游步骤比上游步骤花费的时间长得多时,这在我的世界是常态,因为下游测试包括一整套性能和集成测试...