2014-03-13 58 views
12

我想沿用以下方法:在Jenkins的構建步驟之間傳遞數據

這太簡單了,只是表明我想要做什麼。基本上,我希望能夠在多個構建步驟之間的單個作業範圍內存儲和訪問變量。另外,我可以通過數據存儲到一個文件,後來讀它得到解決,但我喜歡的東西更容易,更「哈克」

生成步驟#1 - 執行shell

$START=timestamp 

生成步驟#2 - 運行高就

生成步驟#3 - 執行shell

$END=timestamp 
TIME_LAPSED=$END-$START 
(post lapsed time somewhere) 

回答

3

詹金斯允許你注入環境變量來構建過程。也許你所要做的就是將開始時間和結束時間注入爲環境變量,並在構建步驟中訪問它們。 enter image description here

+0

這個答案解決你的問題嗎?你試過了嗎? – Gurubaran

+0

這是否使我能夠在衆多構建步驟中進行注入?也就是說,我可以在數據可用時動態設置它們。請記住,我只是以啓動/停止時間爲例。除此之外,我還想做很多事情。 – jcol

+0

@jcol:我不認爲你可以在「構建環境」階段中設置它們後注入env變量。但是當數據可用時,您將能夠操縱它們。 – Gurubaran

0

除了@Gurubaran的建議(如果沒有其他選擇,我會這麼做),我只是選擇將構建步驟加入到一個構建步驟中,這將大大簡化此需求。
您將需要關心錯誤處理邏輯和退出條件,但您的環境將變得堅實!

我希望這會有所幫助。與詹金斯變量工作

+0

呃,這不能解決我的問題。我的外殼構建步驟之間有外部工作。在上面給出的例子中,我想在構建的不同點處計算動態因子。有大量的工作讓我獨立運行各種步驟以及版本控制他們單獨出於不同的原因。 – jcol

3

一種方法是在構建步驟使用jenkins-cli.jar,它需要一些工作,但這樣會在參數列表中添加FOO=1,因爲它在它知道一個構建步驟運行的建立來設置參數。

java -jar ${JENKINS_HOME}/war/WEB-INF/jenkins-cli.jar -s ${JENKINS_URL} set-build-parameter FOO 1 
+0

不錯的解決方案!它適用於用戶具有_overall-read_,_job-read_和_run-update_權限的情況。 –

17

在shell之間還有一件事:工作空間。
簡單而愚蠢的解決方案:使用文件(s)!

巨大的額外的優勢:它的工作原理,當你在多個作業分割你的工作,並使用克隆工作區插件

生成步驟#1 - 執行shell

START=timestamp 
... 
echo $START > env_start.txt 

......

生成步驟#3 - 執行無的

START=`cat env_start.txt` 
END=timestamp 
TIME_LAPSED=$END-$START 
2

殼牌:

  • 字符串參數一個參數化的建設
  • 預建進樣的環境變量到構建過程
  • 在生成步驟進樣的環境變量

作品(如v1.656的)。當然,您可以閱讀它們中的每一個,但分配給它們的新值在後續構建步驟中不可用。

因此,JediMasterCoder的答案和處理通過類似Destroyica的文件是目前唯一的選擇。

2

我們廣泛使用注入環境變量插件,它的工作效果很好。 解決的辦法是:

  1. 設置你的變量myenv =值
  2. 打印在工作區文件:每次更改後的回聲 「myenv = $ myenv」> tmp.myenv
  3. 進樣:使用envinject閱讀環境從文件tmp.myenv - > myenv現在被稱爲作業環境的一部分。
+0

工作就像一個魅力。謝謝! –

相關問題