Jenkins变量在全局变量(env变量)内定义

lf3rwulv  于 2022-11-21  发布在  Jenkins
关注(0)|答案(2)|浏览(214)

我已经通过配置在jenkins中定义了一个环境(全局)变量,如下所示

REPORT = "Test, ${CycleNumber},${JOB_NAME}"

我在我的管道中定义了一个名为Cycle的参数,它的值为new和update。基于这个周期值,CycleNumber应该被更新,我在我的管道中使用脚本块通过groovy进行了如下尝试

if(Cycle == "New")
    {
        CycleNumber = "12345"
    }
else if (Cycle == "Update")
    {
       CycleNumber = "7890"
    }

在此更新之后,如果我回显“${env.REPORT}”,我会得到值“Test,,TestJob”,其中的CycleNumber变量未更新。能否让我知道是否有方法更新此CycleNumber字段?

gstyhher

gstyhher1#

不要依赖Groovy的字符串插值来替换CycleNumber_CYCLE_NUMBER_),您可以稍后在流程中替换它。

pipeline {
  agent any 
  stages {
    stage("Test") {
      environment {
        REPORT = "Test, _CYCLE_NUMBER_,${JOB_NAME}"
      }

      steps {
        script {
            def Cycle = 'New'
            def CycleNumber = 'none'
            if(Cycle == "New"){
                    CycleNumber = "12345"
            } else if (Cycle == "Update") {
                   CycleNumber = "7890"
            }

            def newReport = "$REPORT".replace('_CYCLE_NUMBER_', CycleNumber)
            echo "$newReport" 
        }
      }
    }
  }
}

此外,一旦设置了newReport变量,请确保使用相同的变量。如果执行"${env.REPORT}",则始终会获得分配给tne环境变量的原始值。

kh212irz

kh212irz2#

以下是一个解决方法:Updating environment global variable in Jenkins pipeline from the stage level - is it possible?
TLDR:您不能覆盖在environment(global)中声明的全局环境变量,但是您可以使用withEnv()函数将脚本块 Package 在管道中以引用更新的值,例如:

withEnv(['REPORT=...']) {
  // do something with updated env.REPORT
}

相关问题