2015-04-29 112 views
4

我知道Jenkins在构建执行期间设置了某些环境变量。但我的问题是我可以在我的后生成脚本中访问这些变量吗?Jenkins在后期构建步骤中提供的环境变量

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

有没有一种方法可以从后期构建步骤python脚本访问这些变量?我做错了什么?

回答

9

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

enter image description here

这个环境变量应该在您的后期构建步骤Python脚本中可用。

在Linux和有一个shell脚本,我能够同时访问(詹金斯参数和环境变量):

enter image description here

enter image description here

2

我不知道蟒蛇,但至少shell脚本可以从詹金斯

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

你只需将它添加到后步骤

Jenkins post step screen

+0

我没有尝试这个,但我遇到了一个开放的问题与传递参数,所以我猜这不会工作。请参阅:https://issues.jenkins-ci.org/browse/JENKINS-19873 – haridsv

2

是的,这是其产生环境变量Jenkins本身可在后期构建步骤中使用(对于您自己的环境变量,您将需要EnvInject plugin

您可以运行构建后的“执行shell”或“执行批处理命令”步骤,只需键入set。你看到的所有东西都可以访问。

3

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"