我们 Jenkins 中无效的对象名称 master~1 导致无限版本冲突

invalid object name master~1 in our Jenkins is causing infinite version bump

我们没有对 Jenkinsfile 或 Fastfile 进行任何更改,但是突然间我们在日志中看到了这一点。

invalid object name master~1

它导致无限自动碰撞。

我们在 Fastffile 中使用这个函数来检查我们是否应该升级版本。

def should_bump_version
    last_changes = `git diff podspec HEAD~1`
    !last_changes.lines.any? { | line | line.start_with?("+") and line.include?("s.version") }
end

在同事的帮助下并向 Liam Nichols 大声疾呼,我们意识到有人将我们的 Jenkins 配置切换为 浅层克隆,这导致布尔检查 return true 当它不应该的时候,即我们一旦这样做:

HEAD~1

它导致以下错误被return编辑到它的下一行。

它产生了一个错误,因为对于浅克隆,之前的提交不是克隆的一部分。这使得 HEAD~1 未定义。因此错误:

invalid object name 'master~1'

这导致 should_bump_version 函数错误地 return true。显然 Jenkins 会在每次提交时运行,所以我们陷入了无限循环。

我们通过在 Jenkins 配置中将浅克隆深度设置为 5 来避免这种情况。我们最初更改此设置的原因是某些回购的 git 克隆很大,这样做是为了节省一些大小。