Jenkins声明性管道:如何在when指令上输入前后等待

Jenkins声明性管道:如何在when指令上输入前后等待,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,在我的Jenkins文件中,我有两个阶段:预直播和直播。我在stage Pre-Live上向用户请求输入,以了解是否应将部署部署到Pre-Live环境,然后在stage-Live上,我再次向用户请求输入,以了解是否应将部署到Live环境 我设法实现了这一点。下面是代码的外观: stage("Pre Live") { input { message 'Deploy to Pre Live?' parameters { booleanParam(name: 'RELE

在我的Jenkins文件中,我有两个阶段:预直播和直播。我在stage Pre-Live上向用户请求输入,以了解是否应将部署部署到Pre-Live环境,然后在stage-Live上,我再次向用户请求输入,以了解是否应将部署到Live环境

我设法实现了这一点。下面是代码的外观:

stage("Pre Live") {
  input {
    message 'Deploy to Pre Live?'
    parameters {
      booleanParam(name: 'RELEASE_PRE_LIVE', defaultValue: false)
    }
  }

  when {
    beforeInput false
    expression {
      return RELEASE_PRE_LIVE.toBoolean()
    }
  }

  steps {
    // ...
  }
}

stage("Live") {
  input {
    message 'Deploy to Live?'
    parameters {
      booleanParam(name: 'RELEASE_LIVE', defaultValue: false)
    }
  }

  when {
    beforeInput false
    expression {
      return RELEASE_LIVE.toBoolean()
    }
  }

  steps {
    // ...
  }
}

然而,我不能做的是,太过保留所有这些逻辑,而且如果前一个阶段(Pre-Live)已经执行,那么也只能在阶段现场请求输入。通常,这可以通过Live阶段中的
when
指令完成,但问题是我需要该阶段中的
when
指令在
输入后进行评估,因为我需要
输入值来知道用户是否要部署Live,但是,如果Pre-Live从未运行过,我也不想在这个阶段不必要地等待
输入,因为这没有意义。

您是否考虑过使用构建步骤触发另一个管道,并将管道拆分为两个管道而不是一个管道

下面是一篇关于声明性管道语法的示例文章:

我相信您可以通过设置一个变量,然后将变量从预激活阶段传递到激活阶段,来实现额外的检查。然后在现场阶段作用于该变量

你们已经把下一部分写下来了,但我认为这对于上下文来说是很好的

在输入指令之前进行评估

默认情况下,如果定义了阶段的when条件,则不会在输入之前对其进行计算。但是,这可以通过在when块中指定beforeInput选项来更改。如果beforeInput设置为true,则将首先计算when条件,并且仅当when条件计算为true时才会输入

beforeInput true优先于beforeAgent true


发件人:

我不建议这样做。为什么要使两条管道复杂化并进行维护?这将解决问题。连接管道确实是分离复杂建筑过程的便捷方法。我知道这一点。问题是,如果我在
输入
之前计算
when
指令,那么我将无法使用
输入
作为执行活动阶段的条件。@TiagoSilva如果可以有两个when{}块,那不是很好吗?一个在输入之前计算,另一个在输入之后计算?PS-我一直认为使用脚本化管道解决这个问题要简单得多。我对声明性语句不太熟悉。@TiagoSilva同样,您可以在Live stage
when
指令中的Pre-Live
hasExecuted
中设置一个变量,并在{allOf{expression1;hasExecuted==true}}中使用
when
指令