[英]How to use Jenkins job(s) with dependent git repositories and multiple branches
我們有2個git存儲庫,分別是Platform和US(我們還有其他特定於地理位置的存儲庫,這就是為什么要拆分它們的原因,但它們在此處不一定相關)。 美國取決於平台。
我們正在使用git-flow(這意味着新功能在它們自己的分支中,例如feature/some-product
, develop
分支在某種程度上更穩定,並且代表可進行QA的構建, master
分支是穩定的並且可以發布)。 (如果某個功能同時具有Platform和US部分,則每個功能中都將有一個具有相同名稱的分支。)我們決定,該功能的Jenkins作業不應運行mvn deploy
因為我們不想將它們發布到快照中存儲庫,可能不應該運行mvn install
因為我們不希望其他功能分支從Jenkins的本地存儲庫中獲取它(盡管我們不太確定)。 我們相信他們只應確保所有內容都能編譯並且單元測試通過( mvn verify
)。
這就是問題所在,因為它們是單獨的git存儲庫,而我們對已編譯的jar( install
或deploy
)不做任何事情,
mvn install
引起的擔憂),或者 如果我們只有一個主動開發的分支(或者我們正在使用Subversion),那么這將不是問題。
我們有一些想法 (以及每個想法 )
8.1.0-SNAPSHOT-some-product
)。
git submodule
來檢出Platform和US的feature/some-product
並使用mvn verify --reactor
或將頂層項目作為模塊的簡單pom文件。
--reactor
並不總是起作用。 mvn install
。
feature/other-thing
可能僅在美國銷售,因此在平台feature/some-product
發布到Jenkins本地存儲庫(可能與平台develop
(美國feature/other-thing
通常會針對該平台進行develop
非常不同)之后) (我們認為)會導致美國feature/other-thing
在錯誤的意義上失敗(或通過!)(假設如果針對平台develop
進行編譯,則可能會得到不同的結果)。 我不必親自解決此問題。...這是我對問題的看法:
如果兩個分支都只能有一份工作(一個壞主意),則可以使用參數化的構建插件來傳遞文本字符串“ US”或“ Platform”,並在Shell腳本中包含邏輯,以檢查出相關倉庫的分支。
但是,這消除了回購輪詢啟動構建的能力。 您將必須在cron上設置構建時間表,並且無論回購沒有變化,無論如何都將獲得新的構建(除非您的批處理/ shell腳本足夠聰明以檢查更改)。
我看不出沒有兩個單獨的詹金斯·喬布斯的理由,每個分支一個。
如果一個作業需要訪問.jar(也稱為構建工件),則您始終可以從jenkins服務器上作業的“最新” URL引用任何其他jar的工件。 確保作業指定需要歸檔的工件。
我最終解決此問題的方法是使用maven版本插件。 我必須確保所有模塊都是頂級項目中的托管依賴項,但這可能是一個不同的問題。 此外, 我相信這一點,美國項目將需要顯式聲明它的版本,即使是相同的父。
他們都輪詢git,但是Platform工作如果成功構建,也會觸發US。
版本插件的工作方式需要您分兩個步驟進行。 在工作中添加2個“調用頂級Maven目標”,第二個是clean deploy
。 對於平台和美國而言,第一個有點不同。
平台: mvn versions:set -DnewVersion=yourBranchName-${project.version}
。
美國: mvn versions:update-parent -DparentVersion=yourBranchName-${project.version} versions:set -DnewVersion=yourBranchName-${project.version}
如果該分支僅存在於美國存儲庫中,那么顯然不要將其作為平台,而美國將與該平台相同。
我遇到的最后一個問題最初是我的新版本為${project.version}-yourBranchName
但是這里的問題是作業正在部署到僅接受快照的存儲庫,並且因為該版本未以-SNAPSHOT
結尾輸入錯誤代碼400。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.