本文參考自Jenkins相關資料,結合本人實際使用情況編寫。
相關文檔:
- 《Jenkins:The Definitive Guide》 ——10.4 Multiconfiguration Build Jobs
- 《Building a matrixproject》
可以解決的問題:
有時,我們希望項目能夠根據不同參數、或不同環境來編譯,若使用多個項目來實現,則有些浪費資源,那么最好是可以實現:在一個項目中,就能根據給出的不同參數來編譯不同版本。
我這里以自定義參數為例。
思路
比如當前項目的參數有四種(非完整參數,簡單舉例而已)
python -Purpose test -version 1.0
python -Purpose release -version 1.0
python -Purpose test -version 1.1
python -Purpose release -version 1.1
可以看到 Purpose 和 version 參數是可變的,那我們可以利用兩個變量將以上參數簡化為一條:
python -Purpose %purp% -version 1.%ver%
其中的 purp 可取值為 test
或 release
,ver 可取值為 0
或 1
.
有了目標,接下來就是在Jenkins中的應用實踐。
步驟
1、需要新建一個任務,類型為:構建一個多配置項目(Build multi-configuration project)
2、其他設置與一般任務相同,只是多了一個模塊 Configuration Matrix
a)在Add axis
中,選擇User-defined Axis
,本例需要兩個變量,所以需要再增加一個User-defined Axis
b)這里定義變量和對應的值,Name
中是變量名,Values
中是變量可取的值,中間以空格或回車隔開(注意:當可取值比較復雜的時候,建議每個值用英文雙引號隔離,值之間仍以空格、回車隔開),如圖,填入前面提過的變量和值,此時 purp
和 ver
就是可以在構建參數中直接使用的變量了
c)這個模塊的下方有兩個可選項需要注意:
- Combination Filter
這個是過濾器,目前我們定義了兩個變量,也就是說最后會得到 2*2=4 個版本,而有時我們並不想拿到所有組合的版本,那么這個過濾器就可以起作用了,比如我們不想編譯python -Purpose test -version 1.1
這個版本,過濾方法如圖。
BTW,當有多個版本要過濾時,可以使用括號和 || 分隔,如:
(purp == "test" && ver != "1") || (purp == "test" && ver != "0")
- Run each configuration sequentially
這個是指定所有版本要按順序編譯,建議勾選
3、構建參數
以上我們已經得到所需變量,那就可以在構建中寫入完整的參數配置,這里選擇的是Windows 批處理命令(注意:使用變量的方式因命令而異,比如windows下的變量使用%,所以這里用的是 %purp%
和 %ver%
)
python -Purpose %purp% -version 1.%ver%
4、保存后,查看項目,有一個參數矩陣,通過圓球可以對每個版本的構建結果一目了然(注意這里的0和1是我們剛剛定義的變量值,不是序號)