post 构建步骤期间可用的 Jenkins 环境变量

Jenkins environment variables available during post build step

我了解到 Jenkins 在构建执行期间设置了某些环境变量。但我的问题是我可以在 post-build 脚本中访问这些变量吗?

我 运行 一个快速测试,我无法从 post 构建步骤 python 脚本访问 PROJECT_NAME 和 BUILD_URL 等。

有什么方法可以从 post 构建步骤 python 脚本访问这些变量?我做错了什么吗?

我不确定 python 但至少 shell 脚本可以从 Jenkins

获取参数
/code/workspace/myscript.sh ${BUILD_NUMBER}

您只需将其添加到 post 步骤

另一种解决方案是使用Jenkins EnvInject Plugin将Jenkins参数重新定义为环境变量:

此环境变量应该在您的 post 构建步骤 Python 脚本中可用。

在 Linux 上并使用 Shell 脚本,我能够访问两者(Jenkins 参数和环境变量):

是的,由 Jenkins 本身 生成的环境变量在 post-构建步骤中可用(对于您自己的环境变量,您将需要 EnvInject plugin)

您可以 运行 post-构建 "execute shell" 或 "execute batch command" 步骤,然后只需键入 set。你在那里看到的一切都是可访问的。

每次我需要导出变量时,EnvInject 插件都会读取一个属性文件。

所以我在第一个 post 构建步骤中使用 Groovy PostBuild 插件实现了所需的功能,该步骤从属性文件中读取所有需要的变量并将它们导出以用于下一个 post -构建步骤:

/*
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)
} 

并且在每个需要将变量传递给 post 的构建步骤中-构建步骤我会做类似的事情:

echo "hipchat_message=Server build succeded: <a href='https://$SERVER_NAME/'>$SERVER_NAME</a> (<a href='$BUILD_URL'>Job</a>)" > "$WORKSPACE/postbuild.props"

我在 Freestyle 项目中也遇到了同样的问题。我现在通过将 post 构建步骤移动到构建部分本身(作为那里的最后一步)来解决它。