gpt4 book ai didi

Jenkins 管道 : exporting and reading environment variable inside bash script

转载 作者:行者123 更新时间:2023-12-04 11:47:28 24 4
gpt4 key购买 nike

我有一个构建管道,需要从一些 bash 脚本中提取一个值并在其他地方使用该值。我试图将我的 bash 脚本的结果存储在这样的环境变量中:

#!/usr/bin/env groovy

pipeline {
agent none

stages {
stage('Break Jenkins') {
agent any
steps {
sh """
ENV_VAR=\$(awk -F'-' '{print \$2 }' <<< \$(ls installer-*-ia32-win.zip))
echo $ENV_VAR
"""
}
}
}
}

当解释器点击 echo $ENV_VAR行, Jenkins 抛出一个异常:

groovy.lang.MissingPropertyException: No such property: ENV_VAR for class: groovy.lang.Binding



我试图告诉 Jenkins 解释器 ENV_VAR通过转义美元符号前缀不是 Jenkinsfile 环境变量,如下所示:
echo \$ENV_VAR

像这样
echo '$ENV_VAR'

两者都没有按预期工作。我认为这是我在字符串 block ( sh """ ... """ )语法中的问题,并且还告诉 Jenkins 不要尝试获取 ENV_VAR 的值出 envs收藏。

无论如何,我在谷歌搜索这个问题的解决方案时运气不佳,因为 Jenkins 的管道有自己的环境变量概念,似乎与 bash 环境变量是分开的。

看起来我只能在 environment 中设置 Jenkinsfile 环境变量 block ,这没有帮助,因为我已经在 sh 中堵塞。

简而言之,有没有办法从 sh 中设置和访问环境变量的值?堵塞?

最佳答案

sh 中使用的双引号命令在您的情况下产生问题 - GString 尝试解释 $ENV_VAR但在当前范围内没有定义这样的变量。解决此问题的简单方法 - 改用单引号。

另外值得添加#!/bin/bash在脚本的开头 - 否则您可能会面临构建失败并出现以下错误:

script.sh: line 3: syntax error: unexpected redirection

您可以在下面找到在我的 Jenkins 沙箱中运行良好的修改后的管道脚本:
#!/usr/bin/env groovy

pipeline {
agent none

stages {
stage('Break Jenkins') {
agent any
steps {
sh '''#!/bin/bash
ENV_VAR=$(awk -F'-' '{print $2 }' <<< $(ls *))
echo $ENV_VAR
'''
}
}
}
}

当然,就我而言,我已经简化了 ls$(ls *)因为没有与您的示例中的表达式匹配的文件。希望能帮助到你。

顺便说一句,如果你希望你的 bash 脚本返回你想在管道中使用的东西,你必须执行 sh通过以下方式:
sh(script: "your script", returnStdout: true)

引用: https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script

关于 Jenkins 管道 : exporting and reading environment variable inside bash script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673655/

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