2016-04-24 86 views
13

我目前正在測試Jenkins 2.0的管道方法,以查看它是否適用於我正在使用的構建環境。Jenkins:上游變化觸發多分支管道

首先關於環境本身。它目前由多個SCM存儲庫組成。每個存儲庫都包含多個分支,用於開發的不同階段,每個分支構建多個配置。並非所有配置都適用於每個存儲庫。

對於不同的配置,當前每個存儲庫/分支都設置爲Matrix Project。每個項目都將其構建結果作爲工件進行公開,這些工件將用於下游項目中。

不同的存儲庫相互依賴,因此成功構建上游作業會觸發某些特定的下游作業。目前所有的工作,但建立一個新的分支或調整建設過程所需的工作量很多,因爲許多不同的項目需要手動更改。

現在我想嘗試新的管道。我的想法是創建多分支管道項目,並在存儲庫中放置一個Jenkinsfile,其中包含構建的說明。

主要問題是讓構建觸發對方,因爲基本上構建在特定的上游分支中,需要觸發下游分支。上游項目不知道下游分支需要觸發的信息。每個下游項目都會從某些上游分支中獲取工件,理想的解決方案是,如果下游構建將在作爲工件源的上游構建完成構建時觸發。

問題是隻有下游項目真的知道他們需要什麼工件。在大多數情況下,分支名稱不太可能匹配,這使得從上游項目觸發構建非常困難。

目前這是使用ReverseBuildTrigger解決。但是,只要它靠近管道,這件事就會停止工作。

我真的很茫然如何得到這個工作。有沒有辦法讓ReverseBuildTrigger在管道腳本里面工作?

在單個分支上游更改的情況下,也觸發整個下游構建的所有分支不是一個選項。這會造成太多的平等構建。

+0

您使用哪種SCM類型? – luka5z

+2

@ luka5z不應該是相關的。但它是SVN。 – Nitram

回答

7

我目前正試圖讓這個爲我們的部署工作。 我得到的最接近的是將下列內容添加到下游的Jenkins文件中;

properties([ 
    pipelineTriggers([ 
     triggers: [ 
      [ 
       $class: 'jenkins.triggers.ReverseBuildTrigger', 
       upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS 
      ] 
     ] 
    ]), 
]) 

至少得到詹金斯承認,它應該被觸發時 「some_project」得到的建成即出現在「查看配置」頁面。

但是到目前爲止,'some_project'的構建仍然沒有按預期觸發下游 項目。

這就是說,也許你會有更多的運氣。 讓我知道它是否適合你。

(另有人問過類似的問題Jenkins multi-branch pipeline and specifying upstream projects

+0

絕對正確。新版本的作業插件,從「Pipeline:Job」插件的2.4版本開始,現在支持這個用例。我已經在使用它。 – Nitram

+0

非常適合我,非常感謝你發佈這個!在附註中,我必須在「Manage Jenkins」的「進程內腳本審批」菜單中啓用SUCCESS staticField,但在完成之後,它的工作完美無瑕。謝謝! – jvperrin

2

Pipeline Job配置仍然原生支持構建觸發,包括反向編譯觸發,其他項目後構建內置。您甚至可以從Pipeline Multi-branch項目指定分支。

不幸的是反向觸發不可用管道多分支工作。最接近你可以得到反向觸發是通過使用Promoted Builds Plugin。但它仍然不能讓你配置每個分支的設置。

此外片段發生器闡明:

以下變量目前是管道腳本內不可用:

NODE_LABELS WORKSPACE SCM特定 變量如SVN_REVISION

PS 。也許唯一的辦法是從上游下游

+1

這是正確的。我多年來一直在尋找**多分支流水線作業**的解決方案,並且在最佳情況下可以使用流水線腳本進行配置。 – Nitram

14

如果您使用的是declarative multi-branch pipeline,你可以使用:

triggers { 
    upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS) 
} 

如果您希望分支匹配跨您可以使用依賴性發生:

triggers { 
    upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS) 
} 
+4

+100 - 爲什麼在官方文檔中不可用(「目前只有兩個可用的觸發器是cron和pollSCM。」)。 –

相關問題