【问题标题】:Jenkins: how to stop downstream projects when upstream is abortedJenkins:当上游被中止时如何停止下游项目
【发布时间】:2019-03-28 14:21:27
【问题描述】:

我在 Jenkins 中有一个上游项目,它使用“触发器/调用在其他项目上构建”插件依次调用一些下游项目。

当我执行中止上游项目时,如何自动中止任何下游项目的构建?

如果上游被中止,下游仍在运行,我想要不同的行为。

谢谢。

【问题讨论】:

  • 你不能让下游作业监听上游作业而不是让上游作业触发下游作业吗? Job configuration of downstream build > Build triggers > Build after other projects are built
  • 我不能,因为上游项目需要参数,这些参数必须用作下游项目的输入。

标签: jenkins jenkins-pipeline jenkins-plugins


【解决方案1】:

正如我在评论中提到的,您可以让下游作业监听上游作业,而不是让上游作业触发下游作业。当涉及到参数时,可以使用以下 groovy 代码示例来检索它们:

def up_stream_cause = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)

if (up_stream_cause != null ) {
    def up_stream_run = up_stream_cause.upstreamRun
    def parameters_action = up_stream_run.getAction(ParametersAction)
    def parameters = parameters_action.getParameters()
}

或者,您当然可以在上游构建期间使用以下 groovy 代码简单地构建下游构建:

build job: 'job_name',
parameters: [
    [
        $class: 'StringParameterValue', name: 'parameter',
        value: 'value'
    ]
]

这两种解决方案都允许您在上游构建失败、中止或不稳定时不触发下游构建。

【讨论】:

  • 您曾写道:“这两种解决方案都允许您在上游构建失败、中止或不稳定时不触发下游构建”。那不是我需要的。当手动停止上游时,我什至需要中止已经运行的下游构建。所以,上游开始了,在某些时候它触发了下游,但过了一会儿上游被中断:下游仍在运行,这不是我想要的
  • 那么您绝对应该在我的回答中使用第二种解决方案。中止上游作业也会中止在上游管道中运行的下游作业。请注意,这意味着在下游作业完成之前,上游作业永远不会完成。
【解决方案2】:

您可以查看:

https://wiki.jenkins.io/plugins/servlet/mobile?contentId=36603009#content/view/36603009

可以通过向构建的 URL 端点发送 HTTP POST 请求来停止管道作业。

BUILD ID URL/stop - aborts a Pipeline.
BUILD ID URL/term - forcibly terminates a build (should only be used if stop does not work.
BUILD ID URL/kill - hard kill a pipeline. This is the most destructive way to stop a pipeline and should only be used as a last resort.

最后一个选项非常有效

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    相关资源
    最近更新 更多