【发布时间】:2012-08-30 10:02:27
【问题描述】:
设置
我有一个 Mac mini 设置,Jenkins 从 GitHub 拉取一个 repo 并执行 Xcode 构建。由于 mini 已与 Internet 隔离开防火墙,因此我每 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 下次比较哈希值时,它不会构建,除非自提交版本号以来发生了变化。
感谢所有帮助。
【问题讨论】: