【发布时间】:2015-07-09 08:49:36
【问题描述】:
我了解 Jenkins 在构建执行期间设置了某些环境变量。但我的问题是我可以在我的构建后脚本中访问这些变量吗?
我进行了快速测试,但无法从构建后步骤 python 脚本访问 PROJECT_NAME 和 BUILD_URL 等。
有没有办法可以从构建后步骤 python 脚本中访问这些变量?我做错了什么吗?
【问题讨论】:
标签: jenkins
我了解 Jenkins 在构建执行期间设置了某些环境变量。但我的问题是我可以在我的构建后脚本中访问这些变量吗?
我进行了快速测试,但无法从构建后步骤 python 脚本访问 PROJECT_NAME 和 BUILD_URL 等。
有没有办法可以从构建后步骤 python 脚本中访问这些变量?我做错了什么吗?
【问题讨论】:
标签: jenkins
另一种解决方案是使用Jenkins EnvInject Plugin将Jenkins参数重新定义为环境变量:
此环境变量应该在您的后期构建步骤 Python 脚本中可用。
在 Linux 和 Shell 脚本上,我可以同时访问(Jenkins 参数和环境变量):
【讨论】:
EnvInject 插件在我每次需要导出变量时都会读取一个属性文件。
所以我在构建后的第一个步骤中使用 Groovy PostBuild 插件实现了所需的功能,该插件从属性文件中读取所有需要的变量并将它们导出以用于下一个构建后步骤:
/*
Inject environment variables using Groovy because EnvInject plugin is not user-friendly
*/
import hudson.model.*
def console = manager.listener.logger.&println
// read the props file
def props = new Properties()
new File("${manager.envVars['WORKSPACE']}/postbuild.props").withInputStream {
stream -> props.load(stream)
}
props.each{
key, value -> console("${key}:${value}")
def pa = new ParametersAction([
new StringParameterValue(key, value)
])
manager.build.addAction(pa)
}
在需要将变量传递给构建后步骤的每个构建步骤中,我都会执行以下操作:
echo "hipchat_message=Server build succeded: <a href='https://$SERVER_NAME/'>$SERVER_NAME</a> (<a href='$BUILD_URL'>Job</a>)" > "$WORKSPACE/postbuild.props"
【讨论】:
System.setProperty("hudson.model.ParametersAction.safeParameters", "BUILD_URL")放。见这里issues.jenkins-ci.org/browse/…
我不确定 python 但至少 shell 脚本可以从 Jenkins 获取参数
/code/workspace/myscript.sh ${BUILD_NUMBER}
您只需将其添加到发布步骤中
【讨论】:
是的,由 Jenkins 自己生成的环境变量在构建后步骤中可用(对于您自己的环境变量,您需要 EnvInject plugin)
您可以运行构建后的“执行 shell”或“执行批处理命令”步骤,只需键入 set。您在那里看到的一切都可以访问。
【讨论】:
我在 Freestyle 项目中也遇到了同样的问题。我现在通过将构建后步骤移动到构建部分本身来解决它(作为最后一步)。
【讨论】: