问题描述
目前有两个独立的Azure DevOps Pipeline配置文件:azure-pipelines-staging.yaml
和azure-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
来获取分支名。以下是具体的操作步骤:
- 在
azure-pipelines.yaml
配置文件中,使用以下方式定义trigger
和manifests
属性:
trigger:
branches:
include:
- master
- staging
# ...
manifests: | $(Pipeline.Workspace)/manifests/azure/$(Build.SourceBranchName)/api.yaml
这样配置中的$(Build.SourceBranchName)
将会根据实际分支名进行替换,实现了根据分支名动态选择目录的效果。
- 确保你的Pipeline中已经设置了正确的构建变量。在Azure DevOps Pipeline中,
Build.SourceBranchName
变量会自动获取当前分支的分支名。
通过上述步骤,你的Pipeline配置文件将会根据分支名自动选择相应的目录,实现了staging和production共用的目标。
备选方案
如果你的分支名包含了一些”目录”信息(例如:releases/my_release
),你可以使用Build.SourceBranch
变量来获取分支的最后一个路径片段,从而获得分支名。以下是具体操作步骤:
- 在
azure-pipelines.yaml
配置文件中,使用以下方式定义trigger
和manifests
属性:
trigger:
branches:
include:
- master
- staging
# ...
manifests: | $(Pipeline.Workspace)/manifests/azure/${{ variables.Build.SourceBranchName }}/api.yaml
这样配置中的${{ variables.Build.SourceBranchName }}
将会获取分支的最后一个路径片段作为分支名。
- 确保你的Pipeline中已经设置了正确的构建变量。
通过以上备选方案,你同样可以实现在Pipeline中根据分支名动态选择目录,共用staging和production的配置。