How to Trigger a pull request using script or pipeline once build is successful from azure devops - azure

I have a requirement. Whether it is possible or not I don't know
Requirement: I have three branches 1. Master, 2. Dev, 3. Test.
Here every time new code is committed to dev or test and we create a build to execute the code. Now the requirement is I don't want to merge the code to Master branches unless build is success for master. When build is successful then only PR will be triggered and code will be merged to Master Branch.
Master build ---> Success ----> Then merge code with Master Branch.
Is this possible, without merging the new code into main branch, how can we test the new code from master branch in the build. And if that build is success then only PR has to take place and merge the code in master branch.

My requirement is Once the normal build is success then only PR has to be triggered and merge the code with master branch. Can this be achievable with powershell/bash script that can trigger a PR from pipeline (Build)
I'm pretty sure what you are looking for is branch polices Build validation instead of trigger a PR from pipeline.
You may not fully understand the logic of Build validation and PR.
What you want to achieve is to protect the master and not merge the PR on the branch to the master until the build verification success.
So, the key point is to verify the code after the PR merge, instead of triggering the PR after the build is completed. Otherwise, your build will always be the code on the master before the merge, and this verification will be meaningless.
Adding the Build validation on the master branch, which will trigger the build pipeline when we create a pull request. When we create a PR, it will create a temp commit to save the merged code and build pipeline will checkout this new temp commit to build. If build successful, then we could complete the PR, otherwise, we could not complete the PR, the master code would not be updated.
That should be what you want.

Azure DevOps uses branch polices to achieve this which you can read about Here

Related

Azure multi branch pipeline

How do we create multi branch pipeline in azure.
Say there are 4 developers committing to the same branch, for each commit there should be a seperate build pipeline with unit tests.
for each commit there should be a seperate build pipeline with unit tests.
If you want to have a seperate build pipeline with unit tests for each commit, you need to create multi pipeline for each branch:
And if just want to one build pipeline for those multi branch, you may need to have create multi branch triggers:
I think what you need is a CI pipeline. So lets say, there is a main/master branch, 4 developers have pulled this main branch in their PC/laptop. And all 4 of them are about to work on 4 different defects/bugs say bug1,Bug2, Bug3 and Bug4
Each one of them are supposed to create a branch from main. Say bug/Bug1, bug/Bug2, bug/Bug3 and bug/Bug4. So now we got 4 branches.
What you can do now is switch on pull request branch policies in main branch. Please see below screenshot
Once you switch on this pull request policy, no code can be merged in your main branch without creating a pull request.
Now second part, you have to create a pipeline that will for example, build the code and run some tests.
Now part three: In the same branch policies page, if you scroll down a bit, you will see a setting for "Build Validation" as shown below
What you have to do here is
Press that + sign and configure the pipeline that you have created earlier here.
What this means is
When say Dev 1 whose branch is bug/Bug1 will raise a pull request to merge in main branch, this Build validation will trigger the pipeline that you have configured here.
So when all 4 Devs will raise 4 pull requests, based on their code changes, this pipeline will get triggered and validate those code changes for build + tests.
Also, based on the code review, if there are any further code changes pushed into these branches (bug/Bug1 etc.), you can configure this Build validation in such a way that this pipeline will get automatically triggered whenever new code changes are pushed into a branch which is connected to a pull request.

Azure Devops pipeline triggering twice with Build Validation

I have created a pipeline in my repository which is used to validate code by executing unit tests for code that is being pushed to features/* branches. The same pipeline is used as Build validation pipeline set as Branch Policy on the develop branch to validate incoming PRs. This is the trigger of the pipeline.
# pipeline.yml
trigger:
batch: false
branches:
include:
- features/*
However we have come across the following condition: Given an open PR from refs/heads/features/azure-pipelines -> refs/heads/develop we push a commit on the features/azure-pipelines branch.
This causes the pipeline to trigger twice. To my understanding one of the runs is due to the trigger of the pipeline (The one marked as Individual CI on the screenshot) and the second run is due to branch policy trying to validate code being pushed onto the open PR to develop. (The PR Automated)
Is there any way to disable one of the executions since it's essentially a duplicate? I was maybe looking for a way to retrieve open PRs and abort execution of a pipeline for Individual CI if there is an open PR for a branch but I am not sure that's the best way around that and I am looking for options.
You can set
trigger: none
This way only the branch policy will trigger the pipeline.
Is there any way to disable one of the executions since it's essentially a duplicate?
As we know, we could not disable the Build validation pipeline set as Branch Policy on the develop branch to validate incoming PRs unless we cancel the Build validation.
For your situation, you could try to include [skip ci] in the commit message or description of the HEAD commit to make the Azure Pipelines skip running CI when you plan to merge the features branch to the develop branch.
You could check the document Skipping CI for individual commits for some more details.
Here it depends if they does the same. You can have conditional checks in the pipeline which does a different things for PR and CI runs. However, I'm pretty sure that this is not possible, because one is defined on the YAML and the second on the Azure DevOps portal. So even if you disnle PR trigger here in YAML, a branch policy still runs a PR. And you can specify antyhing in YAML to block branch policy.

Trigger Azure Pipeline on Merge

I have a use case where I have two pipelines configured. One for running tests which are triggered by a Pull Request and another pipeline that is handling deployment. I am using Bitbucket cloud in Azure.
Pipeline A - Run through tests on PR.
Pipeline B - Deploy upon successful merge (approved pull request).
My current setup is to trigger pipeline A when a pull request is submitted. This is no problem and works as intended. The issue I am running into is with Pipeline B. It is triggered regardless of whether the PR is approved or even merged. I know that expected behavior for the CI trigger is to fire off with any action on the branch. The PR trigger also doesn't fit my needs though as it would be redundant with Pipeline A.
What I would like to happen is since Pipeline A fires off on PR, a code reviewer will Approve and Merge the PR and only if the PR ends up getting merged into the Release branch is Pipeline B triggered. Is this possible?
Developer completes code.
Developer submits PR against a Release1.0 branch.
Pipeline A triggers. Tests pass or fail.
Code reviewer approves and merges PR into Release1.0 branch.
Pipeline B triggers and deploys.
UPDATE: For those who bump into the same issue it's actually quite a simple fix. Simply setting the trigger...
pr: none
in Pipeline B will do the trick.
To be clear, this solution is specific to Bitbucket Cloud and GitHub repositories only. The 'pr' syntax in YAML pipelines doesn't exist for Azure Repositories (use branch policy instead).

GitLab do not run CI/CD pipeline when creating new merge request

My GitLab CI/CD is run when I:
click Create merge request
every commit in created branch
when merge request branch is merged to master
I would like to skip first pipeline (on creating merge request), because I would like to optimize (fasten) my CI/CD.
On creating merge request new branch is created from master which already build successfully. There is no point of running the pipeline again.
Can I do that? I already check documentation for when but no idea how to solve this.
I often use the option Create branch instead of Create merge request. This can only be done in the issue view.
Then the first pipeline in this branch is running after the first push into the branch. With a push in the branch you can create a merge request.

Can I combine two branches into a GitLab CI build?

I know that GitLab CI will build each branch separately, but when I build the feature branch I want to compare some test results against the same tests on the master branch.
I could do that against the most recent build of master, or I'm happy to rebuild master on every feature branch commit if required.
Is that possible in GitLab CI?
You can use pipeline triggers to build your master branch during a feature branch pipeline.
In your case I guess you want to wait for the master pipeline to complete. This is not the default Gitlab behavior.
Using a script called pipeline-commander you can wait for the trigger to complete.

Resources