Azure DevOps - 管道不应该为PR触发构建

4

我有一个针对Git存储库的Azure DevOps管道。目前我有一个脚本在Azure Pipeline中验证PR评论。

当代码合并到主分支时,我想触发构建。我不确定如何在Azure DevOps管道中实现这一点。

#Trigger for Development
trigger:
 branches:
   include:
     - development
     - master
#Trigger checks for PR
pr: 
 branches:
    include:
      - development
      - master
      - feature
      - main
 paths:
   exclude:
     - README/*
2个回答

2
当代码合并到主分支时,我想触发构建。
如果您想在代码合并到主分支后验证注释,我们需要在PR完成后触发构建,而不是在创建PR时触发。
因此,在这种情况下, PR triggers 无法满足我们的要求。
为了解决这个问题,我们可以为主分支启用CI触发器,并使用 **条件** eq(variables['Commitcomment'], 'Merge pull request') 来验证PR注释的脚本任务。
有了这个条件,流水线只会在 CommitcommentMerge pull request 时执行作业,这可以过滤掉非PR所做的修改。
要获取变量 Commitcomment 的值,我们可以通过变量 Build.SourceVersionMessage 检查我们在 github 上的提交消息。

enter image description here

如果提交来自PR,则会给出一个默认评论,以“Merge pull request xxx”开头,我们可以添加一个bash\powershell脚本来获取前几个字段。
然后使用Logging Command将变量Commitcomment设置为true,如果前几个字段是Merge pull request
  - task: CmdLine@2
    displayName: get the first few fields
    inputs:
      script: >-
        echo $(Build.SourceVersionMessage)
        set  TempVar=$(Build.SourceVersionMessage)
        set Commitcomment=%TempVar:~0,18%
        echo %Commitcomment%
        echo ##vso[task.setvariable variable=Commitcomment]%Commitcomment%

参考链接:Azure Devops中是否有$(SourceVersion)的短7位版本? 然后将此变量作为条件condition: and(succeeded(), eq(variables['Commitcomment'], 'Merge pull request'))添加到您的任务中,以验证PR注释:
  - task: CmdLine@2
    displayName: script to validate the PR comments
    condition: and(succeeded(), eq(variables['Commitcomment'], 'Merge pull request'))
    inputs:
      script: >
        echo To validate the PR comments

在这种情况下,如果提交不来自PR,则会跳过PR评论验证任务:

enter image description here


@Rasmi,我已经更新了我的答案,并提供了更详细的信息和脚本,希望对你有所帮助。祝你愉快。 - Leo Liu
我已经使用过这个,运行得很好!谢谢! - Rasmi
我也用过这个,非常好用!谢谢! - Greg Trevellick
1
我喜欢这个想法的精神,但是把它建立在消息中的某些词语上对我来说是绝对不可取的。这只是一个等待发生意外的事故。难道没有一种方法可以查看我们正在处理的提交的某些状态吗? - David S

1
如果您只想在特定分支完成合并(pull request验证)时启动构建,则您的代码很好。
如果您想运行验证构建,目前它尚未集成到Yaml管道配置中(https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#pr-trigger)。
要做到这一点,必须通过图形界面完成: 项目设置 -> 存储库 -> 选择您的存储库 -> 策略 -> 分支策略 -> 选择您的分支 -> 构建验证 -> + -> 添加构建信息。

(https://learn.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#build-validation)


我的分支是一个 GitHub 分支,我不确定是否仍然可以向其添加分支策略!? - Rasmi
@Rasmi,GitHub 保护分支仅适用于专业版、团队版和企业版用户,免费账户不支持。此外,即使我们已经启用了 GitHub 保护分支,它仍然可能无法满足您的需求。GitHub 保护分支设置的构建验证是在 PR 打开时触发的,但如果我们在构建触发后在 PR 中添加评论,则新添加的评论将不会被验证。我们需要在 PR 完成后验证所有的评论。 - Leo Liu

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