1
votes

I would like to have a pull request launch a build and that build must succeed before merging into the target branch is allowed.

I have master and develop branch and create feature branches from develop. work is completed and then a pull request initiated to merge back into develop.

I have created a build pipeline that completes successfully when run manually.

I have specified in the branch policies for the develop branch that the build must be run and complete successfully.

Now when I create a pull request, it says that in order for the pull request to be approved, the build must run but it does not run the build. What am I doing wrong? enter image description here

This is a c# .net framework app.

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

This is my yaml for the build pipeline:

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

2 Answers

1
votes

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

The answer is yes! In fact, you have already found the answer.

As we know from the 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.

So, the build validation used for the branches which you want to protected, the .yml should saved in the branch which you set the build policy.

As test, if I set the .yml file under the Test branch, then pull request for the dev branch, the build will not be triggered automatically:

enter image description here

Then, I moved the .yml file to the dev branch with a new build pipeline, it works fine:

enter image description here

Hope this helps.

0
votes

If build is not configured to run automatically on push, you have to run it manually, here: enter image description here

Or you can configure build to trigger automatic on branch update:

enter image description here