如今有兩個Project『run_compile』和『run_deploy』,代碼編譯成功後開始執行環境部署。不須要傳遞參數的狀況下能夠選擇「Build 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插件
咱們在構建中增長步驟"Inject environment variables", 將寫在配置文件中的變量${IFUT},注入到環境變量裏。
這樣在"Trigger parameterized build on other projects"就能夠直接選擇"predefined parameters"方式直接傳遞變量了。一樣的在Job『run_deploy』裏就能夠直接訪問變量${IFUT}了。
原文:https://www.cnblogs.com/junneyang/p/5239480.html