标签触发无法在蔚蓝管道中正常工作

时间:2020-10-28 09:00:17

标签: git azure azure-devops azure-pipelines

我在同一存储库的两个不同分支stageprod中具有完全相同的管道。

我希望分支stage上的管道在创建以stage@开头的标签(例如stage@1.0.1)时运行;同样,我希望分支prod上的管道在创建以prod@开头的标签(例如prod@1.0.1)时运行。

在分支stage中,触发器的定义如下:

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

trigger:
  tags:
    include:
      - stage@*

在分支prod中,触发器的定义如下:

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

trigger:
  tags:
    include:
      - prod@*

现在,我在[Deploy to STAGE]分支中的文件上,在名为stage的Azure DevOps上创建了一个管道,而在[Deploy to PROD]分支中的文件中,在Azure DevOps上创建了一个名为prod的管道。 / p>

我尝试创建标签:

$ git branch
  master
  prod
* stage

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

我希望[Deploy to STAGE]管道可以启动,但是两个管道都启动了:

enter image description here

我错过了什么吗?触发器不应该只包含与定义的模式匹配的标签吗?如何纠正触发器以实现所述流程?

2 个答案:

答案 0 :(得分:3)

两个管道Deploy to STAGEDeploy to Prod是两个相同的管道。尽管您在创建管道Prod时从分支Deploy to Prod中选择了文件,但该管道也将应用于Stage分支。这是因为两个管道都使用相同的azure-pipelines.yml文件,并且该文件同时存在于stage和prod分支上。

从构建运行的屏幕截图中,您可以看到两个管道正在构建完全相同的阶段标签。如果您在prod分支中添加标签,则会看到两个管道也会被触发。

实际上,您只需要创建两个管道之一即可。它们都将应用于生产分支和阶段分支。因此,您只需删除管道Deploy to Prod。当您将标签推入产品分支时。您会注意到管道Deploy to STAGE正在构建prod标签。

如果必须创建两个管道。您需要在prod分支中重命名azure-pipelines.yml文件,或使用一些内容和不同的名称创建一个新的yml文件。然后从这个新的yml文件创建管道Deploy to PROD

如果您选择创建一个新的yml文件来创建管道Deploy to PROD,则需要在prod分支的原始azure-pipelines.yml文件中禁用触发器(trigger: none),以便该管道将标签推到prod分支时,Deploy to Stage不会触发生成prod标签。

总而言之,如果要为不同的分支创建不同的管道,则必须创建不同的管道yml文件。

答案 1 :(得分:1)

我试图重现您的情况,但我无法获得相同的结果。

因此对于stage中的管道

trigger:
  tags:
    include:
      - stage@*

steps:
- powershell: Write-Host "stage"

prod

中的管道
trigger:
  tags:
    include:
      - prod@*

steps:
- powershell: Write-Host "prod"

我知道了:

enter image description here

但是,我建议您使用其他方法,因为这很容易出错,因为合并两个分支时,您始终需要牢记不要触摸此文件。创建两个单独的分支,一个分支带有用于舞台标签的触发器,另一个分支带有用于prod标签的触发器。将常见内容提取到模板中,如果任务中的某些参数不同,请在模板中将它们作为参数。 关于模板,您可以阅读here