詹金斯 - 构建循环
Jenkins - Build loop
解决方案
在配置要构建的分支时删除通配符 *:
*/master
只是master
此错误仅在 GIT SCM 与作业相关时发生。
例如:我每天都有一份工作要构建一个 Android 项目。
首先我认为这是一个 cron 问题,目前我正在使用 50 10 * * *,但我已经尝试 H 10 * * * 没有任何成功。时机成熟时,它总是构建作业(失败或成功)并将另一个作业排队......等等......
最后一次 运行 时间是 2015 年 5 月 22 日星期五 10:01:58 AM BRT;下一个 运行 时间是 2015 年 5 月 23 日星期六 10:01:58 上午 BRT。
即使是带有参数的构建,它每次都会排队另一个作业。
因此它永远处于构建循环中..
配置:
- 詹金斯版本。 1.614.
- Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-46-通用 x86_64)
- GIT客户端插件:1.17.1
- GIT 插件: 2.3.5
控制台输出:
Started by an SCM change
Building in workspace .../jobs/PROJECT_NAME/workspace
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url ssh://GIT_ADDRESS/ # timeout=10
Cleaning workspace
> git rev-parse --verify HEAD # timeout=10
Resetting working tree
> git reset --hard # timeout=10
> git clean -fdx # timeout=10
Fetching upstream changes from ssh://GIT_ADDRESS/
> git --version # timeout=10
> git -c core.askpass=true fetch --tags --progress ssh://GIT_ADDRESS/ +refs/heads/master:refs/remotes/origin/master
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with PROJECT_NAME
Checking out Revision e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6
> git rev-list e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6 # timeout=10
[Gradle] - Launching build.
[android] $ gradle clean build assemble
...
可能是这个问题?
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with PROJECT_NAME
构建循环:
作业配置:
全局配置:
上面的屏幕截图看起来不错,但我确定必须有一些其他配置。
您能否也提供详细(其余)配置?
请在 Build periodically 部分提供以下代码,并尝试是否可以解决问题
H(0-50) 10 * * *
查看控制台日志的开头,包括您手动启动的作业和下一个自动排队的作业。
在控制台日志的开头,它给出了触发构建的原因,例如 09:46:05 Started by an SCM change
或 16:06:58 Started by user Slav
。请在问题中添加 both 控制台日志的开头。
编辑:
现在我们知道 Jenkins 检测到 SCM 更改触发器,我们可以进一步 推测 导致此行为的原因是某种 SCM post-commit 挂钩,或另一个脚本激活发送对詹金斯的请求。
Post-如果未启用 SCM 轮询,提交挂钩将不起作用,但没有其他任何意义,所以让我们研究一下该途径。将 /pollingLog/
添加到触发的内部版本号 "by SCM change" 的内部版本 URL 中。有可能什么都查不到,但如果查到的话,还是确定一下吧。
接下来,如果可能,将 Jenkins 绑定到不同的 IP 地址 and/or 端口。如果有 "rogue" 个脚本触发二次构建,它们将无法适应更改后的地址。
编辑 2:
看起来 git client plugin 本身有一个错误,它已在 1.6.2 版本中 修复。请检查您的 git 插件的版本。
资料来源:https://issues.jenkins-ci.org/browse/JENKINS-10767 and https://issues.jenkins-ci.org/browse/JENKINS-20286
通过使用分支的完整路径“refs/heads/master”而不是“*/master”
,确保你的 repo 没有超过一个与你的分支说明符匹配的分支
解决方案
在配置要构建的分支时删除通配符 *:
*/master
只是master
此错误仅在 GIT SCM 与作业相关时发生。
例如:我每天都有一份工作要构建一个 Android 项目。 首先我认为这是一个 cron 问题,目前我正在使用 50 10 * * *,但我已经尝试 H 10 * * * 没有任何成功。时机成熟时,它总是构建作业(失败或成功)并将另一个作业排队......等等......
最后一次 运行 时间是 2015 年 5 月 22 日星期五 10:01:58 AM BRT;下一个 运行 时间是 2015 年 5 月 23 日星期六 10:01:58 上午 BRT。
即使是带有参数的构建,它每次都会排队另一个作业。
因此它永远处于构建循环中..
配置:
- 詹金斯版本。 1.614.
- Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-46-通用 x86_64)
- GIT客户端插件:1.17.1
- GIT 插件: 2.3.5
控制台输出:
Started by an SCM change
Building in workspace .../jobs/PROJECT_NAME/workspace
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url ssh://GIT_ADDRESS/ # timeout=10
Cleaning workspace
> git rev-parse --verify HEAD # timeout=10
Resetting working tree
> git reset --hard # timeout=10
> git clean -fdx # timeout=10
Fetching upstream changes from ssh://GIT_ADDRESS/
> git --version # timeout=10
> git -c core.askpass=true fetch --tags --progress ssh://GIT_ADDRESS/ +refs/heads/master:refs/remotes/origin/master
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with PROJECT_NAME
Checking out Revision e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6
> git rev-list e6d726c2d31cb0d7e6fad4362ee85e6fac1712c6 # timeout=10
[Gradle] - Launching build.
[android] $ gradle clean build assemble
...
可能是这个问题?
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with PROJECT_NAME
构建循环:
作业配置:
全局配置:
上面的屏幕截图看起来不错,但我确定必须有一些其他配置。
您能否也提供详细(其余)配置?
请在 Build periodically 部分提供以下代码,并尝试是否可以解决问题
H(0-50) 10 * * *
查看控制台日志的开头,包括您手动启动的作业和下一个自动排队的作业。
在控制台日志的开头,它给出了触发构建的原因,例如 09:46:05 Started by an SCM change
或 16:06:58 Started by user Slav
。请在问题中添加 both 控制台日志的开头。
编辑:
现在我们知道 Jenkins 检测到 SCM 更改触发器,我们可以进一步 推测 导致此行为的原因是某种 SCM post-commit 挂钩,或另一个脚本激活发送对詹金斯的请求。
Post-如果未启用 SCM 轮询,提交挂钩将不起作用,但没有其他任何意义,所以让我们研究一下该途径。将 /pollingLog/
添加到触发的内部版本号 "by SCM change" 的内部版本 URL 中。有可能什么都查不到,但如果查到的话,还是确定一下吧。
接下来,如果可能,将 Jenkins 绑定到不同的 IP 地址 and/or 端口。如果有 "rogue" 个脚本触发二次构建,它们将无法适应更改后的地址。
编辑 2:
看起来 git client plugin 本身有一个错误,它已在 1.6.2 版本中 修复。请检查您的 git 插件的版本。
资料来源:https://issues.jenkins-ci.org/browse/JENKINS-10767 and https://issues.jenkins-ci.org/browse/JENKINS-20286
通过使用分支的完整路径“refs/heads/master”而不是“*/master”
,确保你的 repo 没有超过一个与你的分支说明符匹配的分支