【问题标题】:How do I prevent CI from being stuck in a loop due to bumping the build number?如何防止 CI 因构建编号冲突而陷入循环?
【发布时间】:2019-08-04 14:18:31
【问题描述】:
我在 GitHub 上有一个 Xcode (iOS) 项目。每当我将更改推送到 GitHub 时,我希望它能够将新版本推送到 TestFlight。
这是我目前的设置:
- Jenkins 轮询
master 分支,当有新的提交可用时,它会启动 Fast Lane。
- 快速通道增加内部版本号并上传到 TestFlight。
- 快速通道提交内部版本号增加并将更改推送回
master。
问题是master 上的这个新提交导致步骤 1 再次执行,因此它处于无限循环中。
解决此问题的推荐方法是什么?
【问题讨论】:
-
根据this comment,可能有一种方法可以在 Jenkins 中进行轮询时过滤掉某个用户的提交。当我有机会时会尝试并报告。
标签:
xcode
git
jenkins
versioning
fastlane
【解决方案1】:
我们在 Jenkins 提交更改时使用特定的提交消息skip ci。
并创建了一个专用函数。
def call() {
haveSKIPCICommit = sh (script: "git show --name-status | grep '\\[skip ci\\]'", returnStatus: true)
if(haveSKIPCICommit == 0){
return true
}
return false
}
为了完成流程,我们的 Jenkinsfile 使用这个函数来检查应该使用哪个流程。
【解决方案2】:
我不得不
- 定义一个 gitblab 用户并使用它来推送更改。
- 将我的 jenkins 作业更改为参数化作业,并为用户名 (myuser) 定义一个参数。
-
在我的钩子中添加用户名
def triggerUrl = jenkinsUrl + "/job/" + jenkinsJob + "/buildWithParameters?token=" + jenkinsToken + "&myuser=" + user.getName()
new URL(triggerUrl).getText()