设置
我有一个 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 下次比较哈希时,它不会构建,除非自提交版本号以来发生了变化。
感谢您的任何帮助。