2016-08-19 93 views
15

我有一個Git倉庫與我想建立的代碼,但我不是「允許」在其根目錄中添加Jenkinsfile(這是一個Debian軟件包,所以我不能添加文件到上游源)。有沒有辦法將Jenkinsfile存儲在一個存儲庫中並讓它從另一個存儲庫構建代碼?由於我的代碼庫有幾個分支要構建(每個Debian發行版都有一個分支),所以這應該是一個多分支管道。在代碼或Jenkinsfile存儲庫中提交應該觸發構建。詹金斯multibranch管道與Jenkinsfile從不同的存儲庫

獎勵複雜度:我有幾個這樣的代碼/包裝存儲庫,我想重複使用相同的Jenkinsfile所有人。因此它應該以某種方式動態獲取正確的Git URL來使用。要構建的分支在所有存儲庫中都具有相同的名稱。

回答

6

簡短的回答是:你不能做到這一點與multibranch pipeline。多分支管道僅設計(至少現在)以Pipeline script from SCM風格執行特定管道,在項目的根部固定使用Jenkinsfile。您可以使用Multi-Branch Project插件製作多分支自由式項目。首先,您需要像定義multibranch pipeline configuration一樣定義您的multibranch freestyle configuration。 選擇這個新的項目如下所示:

New Freestyle multi-branch project

這種類型的配置將表現爲multibranch pipeline類型完全一樣,也就是說,它會造成你與你配置的名稱和子項目的文件夾它自動檢測到的每個分支。

實現應該然後是小菜一碟:

  1. 指定您SCM庫在多分支配置
  2. 調用另一個構建作爲構建的一部分/後建立,你會在一個標準的做自由式項目,除了必須調用參數化作業(我們稱之爲build-job)併爲其提供存儲庫信息,即Git URL和當前分支(您可以使用預定義變量$GIT_URL$GIT_BRANCH用於此目的)
  3. 在您的build-job中,只需定義從SCM簽出的內嵌管道或管道腳本,然後在此腳本中執行SCM簽出並繼續執行您需要構建的步驟。 build-job管道內容示例:

node() { 
    stage 'Checkout' 
    checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]] 

    stage 'Build' 
    // Build steps... 
} 

當然,如果你的不同multibranches項目需要有點區別對待,你也可以使用中間項目(假設build-project-Abuild-project-B,...),將依次調用通用build-job管道)

的一個,這種解決方案的主要缺點是,你將只負責對所有的建立一個作業,使其更難調試。如果成功/失敗,您仍然可以讓您的多分支項目變爲藍/紅色,但您必須返回build-job才能找到構建的真正問題。

+5

該自由式多分支選項現在似乎已正式廢棄。 Jenkins _does目前沒有提供一個選項來爲Jenkinsfile完全不存在的項目進行多分支構建。這真的很糟糕 – kert