gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:01:55 39 4
gpt4 key购买 nike

我不能在下面的访问阶段使用在前面的块中设置的环境变量。

pipeline{
agent any
stages{

stage("set env variable"){

steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf

"""

}

}



}
}

ERROR: groovy.lang.MissingPropertyException: No such property: brf for class: groovy.lang.Binding



使用 jenkins 声明性管道环境变量的更简单方法是什么?

最佳答案

I cannot use environment variables set in previous blocks in access stage below.



如果仔细查看错误信息,可以看到 Jenkins 实际上无法访问 brf ,不是 env.city .

这里的问题是由 Jenkins 解释的方式引起的 $varsh堵塞:
  • 如果您使用 "double quotes" , $varsh "... $var ..."将被解释为 Jenkins 变量;
  • 如果您使用 'single quotes' , $varsh '... $var ...'将被解释为 shell 变量。

  • 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

    关于jenkins - 使用 env 变量将 Jenkins 管道中的其他变量设置为代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47999314/

    39 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com