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

时间:2020-05-20 08:08:21

标签: azure-devops yaml pull-request

我希望有一个请求请求启动一个构建,并且该构建必须成功才能允许合并到目标分支中。

我拥有master和development分支,并从development创建功能分支。工作完成,然后启动拉取请求以合并回develop。

我创建了一个构建管道,该管道在手动运行时可以成功完成。

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

现在,当我创建请求请求时,它说,为了批准请求请求,必须运行该构建,但不能运行该构建。我究竟做错了什么? enter image description here

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

我应该将yaml保存在dev分支或master中吗?那部分使我感到困惑。触发器正确吗?

这是我对构建管道的看法:

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()

2 个答案:

答案 0 :(得分:1)

我应该将yaml保存在dev分支或master中吗?那部分使我感到困惑。触发器正确吗?

答案是肯定的!实际上,您已经找到了答案。

我们从Build validation获悉:

设置一个策略,要求更改拉取请求才能成功构建 在完成拉取请求之前,先使用受保护的分支。 构建策略可减少中断并保持测试结果通过。建立 即使您正在使用持续的集成(CI),策略也会有所帮助 开发部门以尽早发现问题。

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

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

enter image description here

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

enter image description here

希望这会有所帮助。

答案 1 :(得分:0)

如果未将构建配置为在推送时自动运行,则必须手动运行它,如下所示: enter image description here

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

enter image description here

相关问题