为了尽可能获得最快的反馈,我们有时希望 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 .它简直太棒了 - 但它已被弃用(开发卡住)。
为以下人员创建工作:
在上游(此处为 build
)创建一个独特的工件,例如:
echo ${BUILD_TAG} > build.tag
归档 build.tag
工件。
build.tag
文件并记录指纹,您将能够跟踪父级。promotion
作业成功时获得提升。PARENT_JOB_NAME
和 PARENT_BUILD_NUMBER
使用 Copy Artifact Plugin 从上游 build
作业复制工件
${PARENT_JOB_NAME}
${PARENT_BUILD_NUMBER}
build.tag
记录指纹;这很关键。
同上,建立上下游关系。 它不需要任何构建步骤。您可以执行其他构建后操作,例如“嘿 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/