6

背景:我们正在寻找关于如何优化我们的管道(以前的工作流程)的解决方案。

目前,我们运行了一些并行部署和测试,这些部署和测试分布在 2 个构建器上,每个构建器有 4 个执行器。

管道由 Git 推送触发,因此后续推送将触发多个构建。我们已经尝试了 stage concurrency: 1 选项,它很好地阻止了后续构建的步骤,但会在该特定阶段完成时启动。

问题

我不确定这是最佳实践,但在我看来,最好不要执行新构建,直到前一个构建完成。(因为我们已经向它提交了资源,并且应该允许它完成,即使它不是最新和最大的提交)。

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'
}
4

2 回答 2

3

从工作中configuration,您可以设置:

  • 必要时执行并发构建
  • 安静时期

如果设置,新计划的构建会在实际构建之前等待这么多秒。这对于:

  • 将多个 CVS 更改通知电子邮件合并为一个(当提交跨越目录时,一些 CVS 更改日志电子邮件生成脚本会快速连续生成多个电子邮件)。
  • 如果你的编码风格是这样的,你在几个 cvs/svn 操作中提交了一个逻辑更改,那么设置更长的安静期将防止 Jenkins 过早地构建它并报告失败。
  • 节流构建。如果您的 Jenkins 安装忙于构建太多,设置较长的静默期可以减少构建数量。

如果未在项目级别明确设置,则使用系统范围的默认值。

至于jenkins-pipelineDSL,这篇文章回答你的问题:

默认情况下,管道构建可以同时运行。stage 命令允许您将构建的某些部分标记为受有限并发约束(或以后不受约束)。进入这样一个受限制的阶段时,总是优先考虑较新的构建;如果它们被抢占,较旧的构建将简单地提前退出。

于 2016-04-20T16:14:12.913 回答
1

通过属性使用 Jobs 配置似乎是最干净的方法。

https://stackoverflow.com/a/43963315/1756183

于 2017-05-30T09:20:09.840 回答