簡體   English   中英

如何使用具有相關git存儲庫和多個分支的Jenkins作業

[英]How to use Jenkins job(s) with dependent git repositories and multiple branches

我們有2個git存儲庫,分別是Platform和US(我們還有其他特定於地理位置的存儲庫,這就是為什么要拆分它們的原因,但它們在此處不一定相關)。 美國取決於平台。

我們正在使用git-flow(這意味着新功能在它們自己的分支中,例如feature/some-productdevelop分支在某種程度上更穩定,並且代表可進行QA的構建, master分支是穩定的並且可以發布)。 (如果某個功能同時具有Platform和US部分,則每個功能中都將有一個具有相同名稱的分支。)我們決定,該功能的Jenkins作業不應運行mvn deploy因為我們不想將它們發布到快照中存儲庫,可能不應該運行mvn install因為我們不希望其他功能分支從Jenkins的本地存儲庫中獲取它(盡管我們不太確定)。 我們相信他們只應確保所有內容都能編譯並且單元測試通過( mvn verify )。

這就是問題所在,因為它們是單獨的git存儲庫,而我們對已編譯的jar( installdeploy )不做任何事情,

  • 我們如何才能安全地將已編譯的jar從Platform作業公開給美國,而又不將它們暴露給其他開發人員或工作(或者甚至只是在執行mvn install引起的擔憂),或者
  • 詹金斯(Jenkins)的工作如何為特定分支機構共同構建Platform和US?

如果我們只有一個主動開發的分支(或者我們正在使用Subversion),那么這將不是問題。

我們有一些想法 (以及每個想法

  • 對於功能分支,請使用其他版本(例如8.1.0-SNAPSHOT-some-product )。
    • 每個功能分支似乎都要做很多工作。
    • 似乎它會用“陳舊”的罐子堵塞本地存儲庫,我們需要擔心清除它們。
  • 以某種方式使用git submodule來檢出Platform和US的feature/some-product並使用mvn verify --reactor或將頂層項目作為模塊的簡單pom文件。
    • 如何使Jenkins添加子模塊?
    • 如果子模塊已經存在,則需要一個完整的git repo,這似乎是多余的。
    • --reactor並不總是起作用。
    • 如何提供pom文件?
  • 只需執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM