背景
我们的管道触发器:
trigger:
branches:
include:
- develop
- master
pr:
- master
我们的管道根据一些条件进行操作,这些条件检查它位于哪个分支上,或者是什么触发了管道。
为了不让开发分支触发器本身,它在提交消息中使用 [skip ci]
提交。
我已经验证,当我合并一个不包含任何 [skip ci]
提交的 PR 时它可以工作。所以触发器本身是有功能的。
问题
当我们将 PR 合并到 master 时,它根本不会触发 CI 触发器。在 azure devops 面板中它永远不会出现,表明它被忽略了。
删除 [skip ci] 提交使这个问题消失,但引入了管道不断触发自身的问题。
我们的存储库在 GitHub 中,防止我根据提交作者或其他内容手动过滤掉。
我对合并提交(包含带有 [skip ci]
的旧提交)阻止触发器触发感到有些困惑。
我是否误解了此处的预期行为?
我也愿意接受解决方法。
抱歉,如果已经在某处回答了这个问题,但我找不到任何有此确切问题的人。
提交日志
红色:一个合并的 PR 没有一个 [skip ci] 提交——这正确地触发了 CI 主分支(见带复选标记的带下划线的提交)
黄色:合并与一个[skip ci]提交——这不会触发CI主分支(见下划线提交,不带复选标记)
合并提交的内容均不超过提交消息中的标题。
Azure DevOps 管道日志
为了清楚起见,我标记了与 github 屏幕截图中相同的部分。如您所见,黄色部分中缺少 master 的单个 CI。
答案 0 :(得分:1)
我的猜测是合并提交会生成一个注释,列出所有包含提交的所有提交消息。因此,合并的提交消息包含 [skip-ci]
。
我猜处理这个问题的理想方法是在合并之前编辑提交消息,或者确保您的 skip-ci 标记位于原始提交消息的描述部分。
This is the first.line of the commit
[skip-ci] < on the second line
这样它就会在合并提交消息中被省略。
答案 1 :(得分:1)
当我们将 PR 合并到 master 时,它根本不会触发 CI 触发器。在 azure devops 面板中它永远不会出现,表明它被忽略了。
使用 Github 存储库,我几乎可以重现这个问题。
如果我们为主管道设置触发器,例如:
trigger:
branches:
include:
- develop
- main
pr:
- main
为了避免来自develop分支的CI触发,我们在commit for develop时在commit消息中添加了[skip ci]
:
显然,我们的管道不会被触发。它也可以正常工作。
但是,如果我们在创建 PR 时在上下文中没有创建一个 PR 到主分支:
结果是只有有主分支的 PR 触发器。
PR完成后主分支的CI不触发:
如果从develop分支提交时不加[skip ci]
,PR完成后会触发main分支的CI。
然后我使用 Azure Devops Git 存储库创建了一个类似的示例。我得到了不同的结果。
无论我们在 PR 上下文中是否包含 [skip ci]
,都会在 PR 完成后触发 Main 分支的 CI 构建。这是预期的结果,和github repo的结果明显不同
因此,我们不确定这是问题还是默认行为。我已经提交了一张关于它的新票:
https://developercommunity.visualstudio.com/t/Azure-DevOps-Pipeline-not-triggered-for-/1400393
答案 2 :(得分:0)
我现在通过删除 [skip ci]
提交并在 CI 触发器上使用一些排除路径过滤器来规避这个问题。
这引入了一些其他小问题,但目前这对我们有用。显然这不是一个真正的解决方案,所以我暂时不会将任何内容标记为答案。