詹金斯:上游中断时如何停止下游项目

时间:2019-03-28 14:21:27

标签: jenkins jenkins-pipeline jenkins-plugins

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

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

如果上游中止,则下游仍在运行,我希望有其他行为。

谢谢。

2 个答案:

答案 0 :(得分:0)

如我的评论中所述,您可以让下游作业监听上游作业,而不是让上游作业触发下游作业。对于参数,可以使用以下常规代码示例来检索它们:

class Tower(models.Model):
    name = models.CharField(max_length=128)

class GroupTower(models.Model):
    tower = models.ManyToManyField('Tower', blank=True)

class User(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField('Tower', through='Dates')

class Dates(models.Model):
    user = models.ForeignKey('User', on_delete=models.CASCADE)
    tower = models.ForeignKey('GroupTower', on_delete=models.CASCADE)
    begin_date = models.DateTimeField()
    end_date = models.DateTimeField()

或者,您当然可以使用以下常规代码简单地在上游构建过程中构建下游构建:

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()
}

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

答案 1 :(得分:0)

您可以查看:

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.

最后一个选项非常有效