背景:我们正在寻找有关如何优化管道(以前的工作流程)的解决方案。
目前,我们安静地运行了几个并行部署和测试,这些部署和测试分布在2个构建器上,每个构建器有4个执行器。
管道由Git推送触发,因此后续推送将触发多个构建。我们已经尝试了阶段并发:1选项,它很好地阻止了后续构建的步骤,但是当特定阶段完成时将会激活。
问题(S):
我不确定这是最佳做法,但在我看来,最好不要执行新版本,直到上一版本完成。 (推理我们已经为它提交了资源,并且应该允许它完成,即使它不是最新和最好的提交)。
Q1:这是最佳做法吗?
Q2:我们如何预先抢占新的triggert版本,同时仍然运行前一个版本? (我可以想象迭代这个工作的构建并停止新工作......)。
参见第一阶段的配置[1]
[1]第一阶段..
stage name: 'Checkout and build WAR'
node {
def mvnHome = tool 'Maven 3.2.x'
checkout([$class : 'GitSCM',
poll : true,
branches : [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions : [[$class : 'RelativeTargetDirectory',
relativeTargetDir: 'checkout-directory']],
submoduleCfg : [],
userRemoteConfigs : [[url: 'https://some.repo/repo.git']]])
// Archive the cloned repo.
stash name: 'src', includes: 'checkout-directory/war/src/, checkout-directory/war/pom.xml'
// Run without tests, do the unit and integration tests in a separate stage.
sh "${mvnHome}/bin/mvn -f checkout-directory clean install -DskipTests"
// Archive the application build.
stash name: 'war', includes: 'checkout-directory/war/target/*.war'
}
答案 0 :(得分:2)
从作业configuration
开始,您可以设置:
如果设置,新安排的构建将等待这么多秒 实际建成。这对以下内容非常有用:
- 将多个CVS更改通知电子邮件折叠成一个(一些CVS更改日志电子邮件生成脚本生成多个电子邮件) 当提交跨越目录时快速连续。)
- 如果您的编码风格是在几个cvs / svn操作中提交一个逻辑更改,那么设置更长的静默期将 防止Jenkins过早地建立并报告失败。
- 限制版本。如果您的Jenkins安装过于繁忙且构建太多,则设置较长的静默期可能会减少数量 建筑。
如果未在项目级别显式设置,则为系统范围的默认值 使用。
至于jenkins-pipeline
DSL这个article回答你的问题:
默认情况下,Pipeline构建可以并发运行。舞台命令 允许您将构建的某些部分标记为受约束 有限并发(或者,后来,不受约束)。较新的版本 在进入这样一个受限制的阶段时总是优先考虑;旧的 如果它们被预占,那么构建将会提前退出。
答案 1 :(得分:0)
通过属性使用Jobs配置似乎是最简洁的方法。