简体   繁体   中英

Tags trigger not working in azure pipelines

I have the exact same pipeline in two different branches of the same repository, stage and prod .

I'd like the pipeline on branch stage to run when a tag starting with stage@ is created (eg stage@1.0.1 ); similarly, I'd like the pipeline on branch prod to run when a tag starting with prod@ is created (eg prod@1.0.1 ).

In branch stage , trigger is defined like this:

# .azure-pipelines.yml [refs/branches/stage]

trigger:
  tags:
    include:
      - stage@*

In branch prod , trigger is defined like this:

# .azure-pipelines.yml [refs/branches/prod]

trigger:
  tags:
    include:
      - prod@*

Now I created a pipeline on Azure DevOps named [Deploy to STAGE] from the file in the stage branch, and one named [Deploy to PROD] from the file in the prod branch.

I tried creating a tag:

$ git branch
  master
  prod
* stage

$ git tag -a stage@1.0.6 -m "stage@1.0.6"
$ git push --tags

I expected the [Deploy to STAGE] pipeline to start, but both pipelines started instead:

在此处输入图片说明

Am I missing something? Isn't the trigger supposed to only include tags matching the defined pattern? How do I correct the trigger to achieve the described flow?

The two pipelines Deploy to STAGE and Deploy to Prod are two identical pipelines. Though you choose the file from branch Prod when creating pipeline Deploy to Prod , this pipeline will apply to Stage branch too. This is because both the pipelines use the same azure-pipelines.yml file and this file exists on both stage and prod branch.

From the screenshot of the build runs, You can see the two pipelines were building the exact same stage tag. If you add a tag to prod branch, you will see both the pipeline will be triggered too.

Actually you only need to create either one of the two pipelines. Both of they will apply to prod and stage branch. So you can just delete pipeline Deploy to Prod . When you push a tag to prod branch. You will notice the pipeline Deploy to STAGE is building the prod tag.

If you have to create two pipelines. You need to rename the azure-pipelines.yml file in prod branch or create a new yml file with the some contents and with a different name. And create pipeline Deploy to PROD from this new yml file.

If you choose to create a new yml file to create pipeline Deploy to PROD , you need to disable the trigger ( trigger: none ) in the original azure-pipelines.yml file in prod branch, so that pipeline Deploy to Stage will not be triggered to build prod tag when tag is pushed to prod branch.

In summary, if you want to create different pipelines for different branches, you will have to create different pipeline yml files.

I tried to reproduce you case but I couldn't manage to get the same result.

So for pipeline in stage

trigger:
  tags:
    include:
      - stage@*

steps:
- powershell: Write-Host "stage"

and pipeline in prod

trigger:
  tags:
    include:
      - prod@*

steps:
- powershell: Write-Host "prod"

I got this:

在此处输入图片说明

However, I would recommend you different approach as this could prone to error as on merging both branches you always need to have in mind to do not touch this files. Create two separate branches one with trigger for stage tag and one with trigger for prod tag. Extract common stuff to template and if some arguments in tasks are different please make them as parameters in template. About templates you can read here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM