2017-09-27 161 views
0

我們的開發週期維護多個併發發佈分支。合併之前生成Jenkins git插件選項不觸發

我們希望有一個可靠的方法在循環中儘早公開發布分支中的合併衝突。

在Jenkins的構建工作中,我們指定了一個發佈*作爲要構建的分支,並在構建開始之前指定git插件選項「合併之前構建」。

我的期望是這個插件會合並全部發現分支,然後開始構建每個發佈分支。

我設置了一個虛擬回購來測試這個。回購有一個文本文件。有3個分支:

主(主) release1(從主拍攝) release2(從主拍攝)

我更新release1和release2文件中的同一行刻意製造的合併衝突,我已經證實存在。

現在,當我創建這個工作時,我期望Jenkins嘗試將release1和release2合併到master中,在那裏它會遇到merge衝突並失敗,這就是我們想要的。

但是,詹金斯似乎並沒有嘗試這一點,儘管設置了「合併之前合併」選項。

Fetching upstream changes from [email protected]:xxxxxxx/test_repo.git 
> git --version # timeout=10 
> git fetch --tags --progress [email protected]:xxxxxxx/test_repo.git 
+refs/heads/*:refs/remotes/origin/* 
Seen branch in repository origin/master 
Seen branch in repository origin/release1 
Seen branch in repository origin/release2 
Seen 3 remote branches 
Checking out Revision 5b75c954f334a2fc6c683cd7304d4d84826f02cd 
(origin/release2, origin/master) 
> git config core.sparsecheckout # timeout=10 
> git checkout -f 5b75c954f334a2fc6c683cd7304d4d84826f02cd 
> git rev-list 5b75c954f334a2fc6c683cd7304d4d84826f02cd # timeout=10 
> git rev-list 5b75c954f334a2fc6c683cd7304d4d84826f02cd # timeout=10 
Set build name. 
New build name is '#8 ' 
[build-sharknado-app] $ /bin/sh -xe /tmp/hudson1678313403112351764.sh 
+ cat file.txt 
x=7 

工作成功,我們看不到合併衝突。

爲什麼多個版本*分支合併到master不會發生?

+0

'git checkout -f 5b75c954f334a2fc6c683cd7304d4d84826f02cd'。特定的提交已簽出,因此它處於分離的HEAD狀態。儘管'origin/master'指向'5b75c954f334a2fc6c683cd7304d4d84826f02cd',分支'master'沒有被檢出,因此不在本地存在。這可能是原因。 – ElpieKay

+0

這似乎是問題,但我不知道爲什麼提交正在檢出。我將「origin/release *」指定爲「要建立的分支」選項,並且存在這些分支。但是,只有版本2被合併爲主版本的一部分。 –

回答

0

在這種情況下,Git插件按設計運行。

正在掃描所有分支的版本更改(基於Jenkins工作區中git回購的本地副本)。如果沒有發現,Jenkins僅對最近的提交進行操作。

Git插件沒有設計用於在同一個版本中合併多個分支到主控。

在多個分支上檢測到變化的地方,Jenkins爲每個分支啓動一個新的構建作業。在每項工作中,相關分支都合併爲主,但Jenkins使用-f選項檢出主設備,這會重置主設備上的主設備,因此不會檢測到由多個分支合併爲主設備而引發的構建衝突。

這意味着詹金斯只能檢測合併一個分支到另一個分支產生的合併衝突,而不是將兩個不同分支合併到同一個目標分支產生的衝突。