Azure DevOps Pipeline配置文件中实现staging和production共用

113次阅读
没有评论

问题描述

目前有两个独立的Azure DevOps Pipeline配置文件:azure-pipelines-staging.yamlazure-pipelines-production.yaml。这两个文件之间的唯一区别在于以下内容:
– 触发条件:
yaml
trigger:
branches:
include:
- master # or staging

– Kubernetes清单文件目录位置:
yaml
manifests: | $(Pipeline.Workspace)/manifests/azure/prod/api.yaml
# or
manifests: | $(Pipeline.Workspace)/manifests/azure/staging/api.yaml

用户希望能够将这两个配置文件合并,使得它们可以共用,但不确定如何在manifests属性中根据不同的分支名自动识别并选择相应的目录。

解决方案

最佳方案

请注意以下操作可能因版本差异而有所不同,请进行相应的适配。
要实现在Azure DevOps Pipeline中根据分支名自动选择不同的目录,可以使用预定义的变量Build.SourceBranchName来获取分支名。以下是具体的操作步骤:

  1. azure-pipelines.yaml配置文件中,使用以下方式定义triggermanifests属性:
trigger:
  branches:
    include:
      - master
      - staging
# ...
manifests: | $(Pipeline.Workspace)/manifests/azure/$(Build.SourceBranchName)/api.yaml

这样配置中的$(Build.SourceBranchName)将会根据实际分支名进行替换,实现了根据分支名动态选择目录的效果。

  1. 确保你的Pipeline中已经设置了正确的构建变量。在Azure DevOps Pipeline中,Build.SourceBranchName变量会自动获取当前分支的分支名。

通过上述步骤,你的Pipeline配置文件将会根据分支名自动选择相应的目录,实现了staging和production共用的目标。

备选方案

如果你的分支名包含了一些”目录”信息(例如:releases/my_release),你可以使用Build.SourceBranch变量来获取分支的最后一个路径片段,从而获得分支名。以下是具体操作步骤:

  1. azure-pipelines.yaml配置文件中,使用以下方式定义triggermanifests属性:
trigger:
  branches:
    include:
      - master
      - staging
# ...
manifests: | $(Pipeline.Workspace)/manifests/azure/${{ variables.Build.SourceBranchName }}/api.yaml

这样配置中的${{ variables.Build.SourceBranchName }}将会获取分支的最后一个路径片段作为分支名。

  1. 确保你的Pipeline中已经设置了正确的构建变量。

通过以上备选方案,你同样可以实现在Pipeline中根据分支名动态选择目录,共用staging和production的配置。

正文完