我们开始使用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“推广”构建,而不会产生上述美观的不便。
谢谢
答案 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?'
}