3

设置

我有一个 Mac mini 设置,Jenkins 从 GitHub 拉下一个 repo 并执行 Xcode 构建。因为 mini 与互联网隔离,我每 15 分钟轮询一次 GitHub 的更改。

在开始 Xcode 构建之前,我让 Jenkins 执行以下脚本来增加我的项目构建号并将结果提交到 repo:

#!/bin/sh

agvtool bump -all
/usr/local/git/bin/git commit -a -m "This is Jenkins, updating your build numbers, sir."

在构建之后,我设置了一个构建后操作来运行另一个从 GitHub 拉取然后推送的脚本,如下所示:

#!/bin/sh

/usr/local/git/bin/git pull origin develop
/usr/local/git/bin/git push origin develop

问题

因为 Jenkins 每次运行时都会执行提交和推送到 GitHub,所以下一次轮询会找到它上次推送的更改,无论是否有其他实际更改,都会创建一个新的构建。

问题

我的设置中是否有一些奇怪的东西我应该做不同的事情?我希望 Jenkins 更新我的 Xcode 目标的内部版本号并提交并将结果推送到 GitHub。这种配置显然实现了这一点,但具有每 15 分钟构建一次的副作用,而不是根据需要每 15 分钟构建一次。

Jenkins 正在咨询 lastSuccessfulBuild 的 SHA1 以确定是否有更改,但它是在我提交之前这样做的。有没有办法将当前构建的 SHA1 设置为版本号凹凸提交产生的​​哈希值?像这样:

#!/bin/sh

agvtool bump -all
/usr/local/git/bin/git commit -a -m "This is Jenkins, updating your build numbers, sir."
NEW_SHA=$(/usr/local/git/bin/git rev-parse HEAD)
# Some awesome Jenkins-fu to set the SHA1 of the current build to NEW_SHA

这样,当 Jenkins 下次比较哈希时,它不会构建,除非自提交版本号以来发生了变化。

感谢您的任何帮助。

4

1 回答 1

2

我认为这个 SO 问题回答了您的问题,但我不能肯定地说,因为我们没有在轮询分支上进行构建版本增量。我还会在构建之前执行 git push,这样您就不必担心在构建过程中提交代码时会发生多少合并。值得庆幸的是,如果您保持原样,您将不必担心 Xcode 项目合并的方式。

于 2012-09-05T16:26:19.027 回答