Azure DevOps构建管道从PR触发器获取源分支

4

我一直在构建一个构建流水线,当提交请求到主干时触发,因此我们有一个分支策略,即主干分支上的唯一更改是通过拉取请求完成的。

我希望构建流水线能够检出PR的源分支,并作为构建流水线的一部分对源分支进行一些提交。我以为我可以只使用Build.SourceBranchName变量,但当流水线被触发时,SourceBranchName是“master”。所以我无法使用它。

有没有简单的方法来解决这个问题?


3
你可以使用 System.PullRequest.SourceBranch 变量来访问在拉取请求中正在被审查的分支。只有当 Build.Reason 等于 PullRequest 时,此变量才可用。 - LJ.
@LJ. 谢谢!这样就可以了,现在的问题是因为新提交的 PR 会再次运行管道,这不应该发生,因为我在提交消息中写了 [skip ci]。你知道该怎么解决吗? - Shadesfear
我认为 [skip-ci] 不适用于 PR 构建 - 它仅适用于 IndividualCI 构建。解决方法是添加运行条件,如果提交消息中包含 [skip ci],则使构建跳过所有任务 - 就像这样 condition: not(contains(variables['Build.SourceVersionMessage'], '[skip ci]')) - LJ.
问题解决了吗?如果没有,您能否告诉我关于这个问题的最新信息? - Leo Liu
1个回答

5
我希望构建流程能够检出PR的源分支。
要检出PR的源分支,您可以使用与PR相关的预定义系统变量 predefined system variables: System.PullRequest.SourceBranchSystem.PullRequest.TargetBranch 要获取在pull request中正在审查的分支,我们应选择变量System.PullRequest.SourceBranch
现在问题是,由于对PR进行了新提交,它再次运行了流水线,这不应该发生,因为我在提交消息中有[skip ci]。
正如我们所知,[skip ci][ci skip]用于跳过运行CI,就像UI上的选项“启用持续集成”一样。

enter image description here

然而,我们当前的情况是构建验证的分支策略而不是CI。尽管它们似乎在执行相同的构建任务,但这与CI非常不同。分支策略是为了保护我们的分支免受错误提交的破坏。这是一个经过验证的操作,而不是持续集成。
查看跳过单个提交的CI文档以获取更多详细信息。
因此,这是两种不同的情况,我们无法将CI设置应用于分支策略。
其次,分支策略用于保护我们的分支,任何提交都需要通过分支策略进行验证,尽管有时我们可以知道我们的修改不需要构建验证,但我们不确定是否有任何遗漏导致目标分支被破坏。跳过不必要的验证会带来一些施工便利性,但由此带来的风险测量使这些便利性可以忽略不计,因此我们不建议跳过分支办公室策略的验证。
如果您坚持跳过构建验证,则可以尝试LJ的建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接