Jenkins-工作流程 - 推广阶段(比“输入”更好的解决方案)?

时间:2016-06-05 17:38:03

标签: jenkins-workflow

我们开始使用jenkins-workflow来管理我们的Continuous Delivery管道。

以下是我们正在做的一个简单的管道示例:

[Build project] => [运行单元测试] => [运行集成测试] => [QA促销] => [在QA中部署] => [UAT促销] => [在UAT部署]

其中: [QA Promotion]和[UAT Promotion]是等待某人“推广”构建的阶段(通过“输入”步骤实现)。

这纯粹是美学,但我们发现不太好的一件事是,在促销阶段等待的每个构建都显示为“进行中”(进度条无限期运行)。这很奇怪,因为如果最后10个版本未在QA中部署,那么我们将结束将10个版本显示为“正在运行”。

我知道等待输入不会导致任何性能问题。因为如果这些输入步骤没有封装在一个节点内,那么它们只会消耗flyweight执行程序(一个假设不占用任何重要计算能力的无数插槽,src:https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md)。

所以,我想知道它是否存在一个更好的解决方案,允许我们使用Jenkins Pipeline“推广”构建,而不会产生上述美观的不便。

谢谢

3 个答案:

答案 0 :(得分:1)

里程碑插件可在此处找到:https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Milestone+Step+Plugin

它的作用:

默认情况下,Pipeline构建可以并发运行。里程碑步骤确保较旧的构建不会覆盖较新的构建,因此如果较新的构建已经通过,则永远不允许旧构建通过里程碑(它被中止)。

此步骤在Continuous Delivery管道中特别有用,其中构建顺序非常重要,因为顺序定义了要传递的内容,因此它提供了一个控制点,可以中止任何构建尝试在较新的构建时传递旧提交的构建已经交付。

一般来说,这一步授予:

Builds pass milestones in order (taking the build number as sorter field).
Older builds will not proceed (they are aborted) if a newer one already passed the milestone.
When a build passes a milestone, any older build that passed the previous milestone but not this one is aborted (see TIP 2 below).

主要的缺点是它不允许你推广旧的版本,而你仍然有很多工作“等待等待”。

答案 1 :(得分:0)

  

如果最后10个版本未在QA中部署,那么我们将结束将10个版本显示为“正在运行”

concurrency的{​​{1}}参数是为此目的而设计的。它与stage之类的内容并不一致,这就是input步骤正在测试的原因。

答案 2 :(得分:0)

如果要清理管道,可以在输入上使用超时

timeout(time:1, unit:'DAYS') {
    input message:'Approve deployment?'
}