【发布时间】:2017-09-27 10:08:00
【问题描述】:
我们的开发周期维护多个并发发布分支。
我们希望有一种可靠的方式在循环中尽早暴露发布分支中的合并冲突。
在 Jenkins 的构建作业中,我们指定一个 release* 作为要构建的分支,并在构建开始之前将 git 插件选项指定为“Merge Before Build”来掌握。
我的期望是插件会在开始构建每个发布分支之前将它找到的 所有 发布分支合并到 master 中。
我已经设置了一个虚拟仓库来测试它。回购有一个文本文件。有3个分支:
主(主) release1(取自master) release2(取自master)
我在 release1 和 release2 中更新文件中的同一行,故意创建我已确认存在的合并冲突。
现在,当我构建作业时,我希望 Jenkins 尝试将 release1 和 release2 合并到 master 中,在那里它会遇到合并冲突并失败,这正是我们想要的。
然而,尽管设置了“构建前合并”选项,但 Jenkins 似乎并未尝试这样做。
Fetching upstream changes from git@bitbucket.org:xxxxxxx/test_repo.git
> git --version # timeout=10
> git fetch --tags --progress git@bitbucket.org: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
作业成功,我们没有看到合并冲突。
为什么没有将多个 release* 分支合并到 master?
【问题讨论】:
-
git checkout -f 5b75c954f334a2fc6c683cd7304d4d84826f02cd。签出特定的提交,使其处于分离的 HEAD 状态。分支master未检出,因此在本地不存在,尽管origin/master指向5b75c954f334a2fc6c683cd7304d4d84826f02cd。这可能是原因。 -
这似乎是问题所在,但我不知道为什么要签出提交。我将“origin/release*”指定为“Branches to Build”选项,并且这些分支存在。但是,作为构建的一部分,只有 release2 被合并到 master。