使用Env变量将Jenkins管道中的其他变量设置为代码



我无法使用下面的访问阶段的以前块中设置的环境变量。

pipeline{
agent any
stages{
      stage("set env variable"){
      steps{
           script{
             env.city = "Houston"
             }
          }
       } 
     }
     stage("access"){
     steps{
           sh """
              set brf = ${env.city}
              echo $brf
              """
         }
     }

  } 
  }

错误:groovy.lang.missingpropertyexception:no这样的属性:brf for class:groovy.lang.binding

什么是使用Jenkins声明管道Env变量的更轻松的方法?

我无法使用下面访问阶段的以前块中设置的环境变量。

如果您仔细观察错误,您可以看到Jenkins实际上无法访问brf,而不是env.city

这里的问题是由詹金斯(Jenkins)在sh内部解释$var的方式引起的:

  • 如果您使用"double quotes",则sh "... $var ..."中的$var将被解释为Jenkins变量;
  • 如果您使用'single quotes',则sh '... $var ...'中的$var将被解释为壳变量。

由于脚本中的sh代码包裹在"double quotes"中,因此$brf被认为是Jenkins变量,而没有此类变量定义,因此发生了错误。

$之前使用双引号内添加的shell变量:

sh "echo $var"

的工作方式与

相同
sh 'echo $var'

这应该修复您的管道脚本:

pipeline{
    agent any
    stages{
        stage("set env variable"){
            steps{
                script{
                    env.city = "Houston"
                }
            }
        }
        stage("access"){
            steps{
                sh """
                    brf=${env.city}
                    echo $brf
                """
            }
        }
    }
}

管道输出:

[test] Running shell script
+ brf=Houston
+ echo Houston
Houston

您不应该有任何问题来获得此代码的变量:

 stage("access"){
     steps{
           sh "set brf = ${env.city}"
           echo '$brf'
      //or 
      sh "set brf = ${env.city} && echo $brf"
      }
 }

我认为这是您问的,但让我知道您是否有疑问。

相关内容

  • 没有找到相关文章

最新更新