TeamCity指定VCS默认分支触发器失效,处于Pending状态如何排查?
嘿,我来帮你排查这个TeamCity触发器一直Pending的问题,结合你用的2017.2.3版本,咱们一步步梳理配置里的遗漏点:
1. 先确认VCS根的默认分支映射是否正确
首先得确保ProjectA_Android这个VCS根的Default branch字段确实填的是ref/heads/master。你可以进这个VCS根的配置页面看看,如果这里映射错了,TeamCity里的<default>就不会指向master分支,自然检测不到你想要的变更。
2. 把Trigger Rules改得更精确
你现在写的+:root=ProjectA_Android:**会包含这个VCS根下所有分支的所有文件变更,但你要的只是master分支的变更。所以得把Trigger Rules调整成:
+:root=ProjectA_Android:refs/heads/master/**
这里直接用实际的分支ref路径(refs/heads/master)而不是<default>变量,因为Trigger Rules里对TeamCity内置变量的支持有限,直接写具体路径更靠谱。
要是你想更明确地排除其他6个VCS根的干扰,还可以在Trigger Rules里先加一条排除所有根的规则,再放行目标分支:
-:root=*:** +:root=ProjectA_Android:refs/heads/master/**
这样逻辑更清晰,彻底避免其他VCS根的变更影响触发器。
3. 确认Branch Filter的逻辑没问题
你设置的+:<default>是对的,但要记住:Branch Filter是用来指定构建配置要监控哪些分支的任务,而Trigger Rules是过滤哪些变更能触发构建,两者配合才能精准触发。
4. 检查VCS根能不能正常连接
进TeamCity的VCS根配置页面,点Test Connection按钮,确认TeamCity能顺利拉取ProjectA_Android的master分支代码。要是连接失败或者拿不到分支信息,触发器肯定会一直Pending,因为TeamCity根本检测不到任何变更。
5. 关于Per-checkin Triggering的小提醒
你没勾选Per-checkin Triggering,这意味着TeamCity会等一段时间(默认60秒)合并变更后再触发构建,而不是每提交一次就立刻触发。如果你的测试提交间隔很短,可能需要等一会儿;但要是一直Pending,那基本还是前面的配置有问题。
按照上面的步骤调整后,应该就能实现仅当ProjectA_Android的master分支有新提交时触发构建的需求啦。
内容的提问来源于stack exchange,提问作者Youngjae

