Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins-如果作业由上游作业启动,则更改属性_Jenkins_Jenkins Plugins_Jenkins Pipeline - Fatal编程技术网

Jenkins-如果作业由上游作业启动,则更改属性

Jenkins-如果作业由上游作业启动,则更改属性,jenkins,jenkins-plugins,jenkins-pipeline,Jenkins,Jenkins Plugins,Jenkins Pipeline,我在詹金斯有两份工作:父母和孩子(成功地建立在父母的基础上会触发建立在孩子的基础上) 两个项目都有一个属性值: 项目父项:值=第一个 项目子项:值=下一个 我想要的是,如果我直接构建job子级,VALUE=NEXT。但是,如果作业子项由上游作业父项启动,则该属性将被覆盖,并且值=第一个 我尝试在父级上设置生成后操作以触发在子级上的参数化生成,并定义了参数值=FIRST。然而,在运行Parent并在Child上触发构建之后,我查看了Child和VALUE=NEXT的控制台输出:它没有改变 (我

我在詹金斯有两份工作:父母和孩子(成功地建立在父母的基础上会触发建立在孩子的基础上)

两个项目都有一个属性值:

  • 项目父项:值=第一个
  • 项目子项:值=下一个
我想要的是,如果我直接构建job子级,VALUE=NEXT。但是,如果作业子项由上游作业父项启动,则该属性将被覆盖,并且值=第一个

我尝试在父级上设置生成后操作以触发在子级上的参数化生成,并定义了参数值=FIRST。然而,在运行Parent并在Child上触发构建之后,我查看了Child和VALUE=NEXT的控制台输出:它没有改变

(我测试了将参数值传递给Child,如果值在Child中未定义并且有效,则值首先相等。因此Jenkins可以传递参数,但如果参数已在下游作业中定义,则无法覆盖该参数。)


如何覆盖下游作业中的属性?

请注意,如果您在沙盒中运行脚本,这需要一些批准

isUpstreamTriggered = (currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause) != null)

更多信息和。

这是一篇老文章,但我认为值得给出第二个选项,以确定当前构建是否是由上游项目引起的

   `def upstreamProjectCount = 0;
    currentBuild.upstreamBuilds?.each { b ->
        upstreamProjectCount++
    }
    if (upstreamProjectCount == 0) {
        echo "Not a upstream project"
    } else {
        echo "upstream project"
    }  

在这两个项目中,您在哪里定义了“VALUE”属性?很抱歉,答复太晚,但我已经解决了这个问题。值在子作业中通过EnvInject定义为环境变量,而不是参数。因此,当试图传递参数值以覆盖环境变量值时,它遇到了问题。通过修改子作业以使值成为参数,我能够成功地将新参数从父作业传递到子作业。因此,如何在两个项目中定义它最终成为发布者,这非常有效!但是它比需要的时间长了一点,我将它缩减为
if(currentBuild.upstreamBuilds){…}
。如果
upstreamBuilds
不存在,或者存在但为空,Groovy认为它是错误的。如果它存在并且至少包含1个元素,那么它是真实的。