如何根据拉取请求启动构建管道

How to launch a build pipeline on pull request

我希望通过拉取请求启动构建,并且该构建必须成功才能合并到目标分支。

我有 master 和 develop 分支,并从 develop 创建功能分支。工作完成,然后发起拉取请求合并回开发。

我已经创建了一个构建管道,当 运行 手动时它会成功完成。

我在开发分支的分支策略中指定构建必须 运行 并成功完成。

现在当我创建拉取请求时,它说为了使拉取请求获得批准,构建必须 运行 但它不会 运行 构建。我究竟做错了什么?

这是一个 c# .net 框架应用程序。

我应该将 yaml 保存在 develop 分支还是 master 中?那部分让我很困惑。触发器是否正确?

这是我的构建管道的 yaml:

trigger:
- develop

pool:
  vmImage: 'windows-latest'

name: '1.0.1.$(Rev:r)'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- checkout: git://OvaFlow/Utilities@develop
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: VersionAssemblies@2
  inputs:
    Path: '$(Build.SourcesDirectory)'
    VersionNumber: '$(Build.BuildNumber)'
    InjectVersion: true
    FilenamePattern: 'AssemblyInfo.*'
    OutputVersion: 'OutputedVersion'

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(Build.SourcesDirectory)/Utilities/packages.config'
    feedsToUse: config
    nugetConfigPath: '$(Build.SourcesDirectory)/NuGet.config'
    restoreDirectory: '$(Build.SourcesDirectory)/packages'

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(Build.SourcesDirectory)/UtilitiesTests/packages.config'
    feedsToUse: config
    nugetConfigPath: '$(Build.SourcesDirectory)/NuGet.config'
    restoreDirectory: '$(Build.SourcesDirectory)/packages'

- task: VSBuild@1
  displayName: 'Build solution **\*.sln'
  inputs:
    solution: '$(Build.SourcesDirectory)/Utilities.sln'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

- task: VSTest@2
  displayName: 'VsTest - testAssemblies'
  inputs:
    testAssemblyVer2: |
     **$(BuildConfiguration)\*test*.dll
     !**\obj\**
    codeCoverageEnabled: true
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
  continueOnError: true

- task: PublishSymbols@2
  displayName: 'Publish symbols path'
  inputs:
    SearchPattern: '**\bin\**\*.pdb'
    PublishSymbols: false
  continueOnError: true

- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    Contents: '**\bin$(BuildConfiguration)\**'
    TargetFolder: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

如果构建没有配置为 运行 自动推送,你必须手动 运行 它,在这里:

或者您可以将构建配置为在分支更新时自动触发:

Should I be saving the yaml in the develop branch or master? That part confuses me. Is the trigger correct?

答案是肯定的!其实你已经找到了答案。

我们从 Build validation 中得知:

Set a policy requiring changes in a pull request to build successfully with the protected branch before the pull request can be completed. Build policies reduce breaks and keep your test results passing. Build policies help even if you're using continuous integration (CI) on your development branches to catch problems early.

因此,用于您要保护的分支的构建验证,.yml 应该保存在您设置构建策略的分支中。

作为测试,如果我在 Test 分支下设置 .yml 文件,然后对 dev 分支进行拉取请求,构建将不会自动触发:

然后,我使用新的构建管道将 .yml 文件移动到 dev 分支,它工作正常:

希望这对您有所帮助。