2015-04-29 165 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"