jenkins - 在多个同时上游作业成功后,如何让 Jenkins 作业开始?

为了尽可能获得最快的反馈,我们有时希望 Jenkins 作业并行运行。 Jenkins 能够在作业完成时启动多个下游作业(或“ fork ”管道)。但是,Jenkins 似乎没有任何方法可以使下游作业仅在该分支的所有分支成功开始(或“加入”分支)时才开始。

Jenkins 有一个“在构建其他项目后构建”按钮,但我将其解释为“在 any 上游作业完成时开始这项工作”(而不是“在 all 上游作业成功”)。

这是我正在谈论的内容的可视化。有谁知道是否存在插件来做我所追求的?


编辑:

当我在 2012 年最初发布这个问题时,Jason 的回答(加入和升级的构建插件)是最好的,也是我采用的解决方案。

但是,dnozay 的答案(构建流程插件)在这个问题之后一年左右变得流行起来,这是一个更好的答案。对于它的值(value),如果人们今天问我这个问题,我现在建议改为。

最佳答案

管道插件

您可以使用 Pipeline Plugin (以前的 workflow-plugin)。

它带有many examples ,你可以关注这个tutorial .

例如

// build
stage 'build'
...

// deploy
stage 'deploy'
...

// run tests in parallel
stage 'test'
parallel 'functional': {
  ...
}, 'performance': {
  ...
}

// promote artifacts
stage 'promote'
...

构建流程插件

您也可以使用 Build Flow Plugin .它简直太棒了 - 但它已被弃用(开发卡住)。

设置作业

为以下人员创建工作:

  • 构建
  • 部署
  • 性能测试
  • 功能测试
  • 促销

设置上游

  1. 在上游(此处为 build)创建一个独特的工件,例如:

    echo ${BUILD_TAG} > build.tag
    
  2. 归档 build.tag 工件。

  3. 记录指纹以跟踪文件使用情况;如果任何作业复制相同的 build.tag 文件并记录指纹,您将能够跟踪父级。
  4. 配置为在 promotion 作业成功时获得提升。

设置下游作业

  1. 我使用 2 个参数 PARENT_JOB_NAMEPARENT_BUILD_NUMBER
  2. 使用 Copy Artifact Plugin 从上游 build 作业复制工件

    • 项目名称 = ${PARENT_JOB_NAME}
    • 哪个构建 = ${PARENT_BUILD_NUMBER}
    • 要复制的工件 = build.tag
  3. 记录指纹;这很关键。

设置下游推广作业

同上,建立上下游关系。 它不需要任何构建步骤。您可以执行其他构建后操作,例如“嘿 QA,轮到您了”。

创建构建流程作业

// start with the build
parent = build("build")
parent_job_name = parent.environment["JOB_NAME"]
parent_build_number = parent.environment["BUILD_NUMBER"]

// then deploy
build("deploy")

// then your qualifying tests
parallel (
    { build("functional tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) },
    { build("performance tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) }
)

// if nothing failed till now...
build("promotion",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)

// knock yourself out...
build("more expensive QA tests",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)

祝你好运。

https://stackoverflow.com/questions/9012310/

相关文章:

android - 多个 dex 文件定义 Lorg/apache/cordova/BuildHel

go - 如何编译由多个文件组成的 Go 程序?

visual-studio - 为什么在 Visual Studio 中执行之前 F5 不重建项目?

android - 如何使用 Ant 构建 Android 示例项目? build.xml 不存在

c# - Await 运算符只能在 Async 方法中使用

c++ - #将所有 .cpp 文件包含在一个编译单元中?

c++ - 为多个项目和配置有效地使用 Visual Studio 项目属性

Xcode 构建警告 - 目标完整性 - 配置文件仅针对 ProjectnameTests 目标到期

java - 无法找到 tools.jar

iphone - 如何在 Xcode 中减少构建时间/加快编译时间?