【问题标题】:Merge Before Build Jenkins git plugin option not triggering在构建 Jenkins git 插件之前合并选项未触发
【发布时间】: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。

标签: git jenkins merge


【解决方案1】:

在这种情况下,Git 插件按设计运行。

正在扫描所有分支的修订更改(基于 Jenkins 工作区中 git 存储库的本地副本)。如果没有找到,Jenkins 只会对最近的提交进行操作。

Git 插件并非旨在将多个分支合并到同一构建中的 master。

如果在多个分支上检测到更改,Jenkins 会为每个分支启动一个新的构建作业。在每个作业中,相关分支都会合并到 master,但 Jenkins 使用 -f 选项检查 master,这会重置 master 上的 HEAD,因此不会检测到由多个分支合并到 master 引起的构建冲突。

这意味着 Jenkins 只能检测到将一个分支合并到另一个分支而产生的合并冲突,而不能检测将 2 个不同分支合并到同一个目标分支所产生的冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2022-10-06
    相关资源
    最近更新 更多