[Jenkins]傳遞自定義變量:job內部步驟傳遞 & job之間傳遞

場景一: Job構建步驟間的變量傳遞

譬如『Execute shell』1 中的自定義變量傳給『Execute shell』2

解決方法:讀寫文件 或 export導出變量

 

場景二: Job之間的變量傳遞

現在有兩個Project『run_compile』和『run_deploy』,代碼編譯成功後開始執行環境部署。不需要傳遞參數的情況下可以選擇“Build other projects“的方式。

 

 

需要傳遞參數則需要選擇"Trigger parameterized build on other projects"的方式。

 

 

Jenkins Parameterized Trigger plugin可以實現Job間參數傳遞但是有侷限性,我們只能選擇傳遞當前build的參數或者環境變量。 (例:$GIT_COMMIT是git plugin提供的一個變量,存着當前build觸發時最新的git code.) 如果要傳遞一個自定義的變量怎麼辦呢? 構建步驟中的自定義變量在執行結束後都會被回收,我們不可能在"predefined parameters"中取到。

依舊以編譯任務爲例,前端代碼的提交不需要觸發編譯,沒有編譯也就不需要執行接下來的『run_ut』單元測試。(泛指後臺代碼的UT, JS UT這種稀有存在暫不考慮)

如何將編譯的狀態告訴下游的單元測試呢?

聰明的你想起了場景一的解決辦法。對,我們也可以通過讀寫文件的方式來解決這個問題嘛!

不過這裏我不推薦大家採用這種方式,理由有兩點:

一,『run_compile』和『run_ut』有可能被部署在不同slave上,如果考慮更加智能的CI配置方式會在構建時動態的選擇空閒的slave去執行,這種文件讀寫的方式就有了很大的侷限性;

二,很難確保文件傳遞的準確性,如果『run_compile』寫入文件失敗,『run_ut』中讀到的就是一箇舊值一個不準確的值。

 

解決方案一:通過properties file的方式傳遞參數。

首先將變量以"xx=xx"的樣式寫入到配置文件『propfile.txt』中。

 

然後在"Trigger parameterized build on other projects"中選擇"Parameters from preperties file",在propfile裏寫入多個變量就可以傳遞多個值。

 

建議勾選"Don't trigger if any files are missing"和刪除舊文件配合使用。

最後在『run_ut』中可以直接獲取這個變量來使用了。

 

 

解決方案二: 通過EnvInject Plugin插件

EnvInject Plugin可以支持修改、注入和刪除環境變量。

我們在構建中增加步驟"Inject environment variables", 將寫在配置文件中的變量${IFUT},注入到環境變量裏。

 

 

這樣在"Trigger parameterized build on other projects"就可以直接選擇"predefined parameters"方式直接傳遞變量了。同樣的在Job『run_deploy』裏就可以直接訪問變量${IFUT}了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章