【发布时间】:2021-02-22 21:51:33
【问题描述】:
假设我在 Azure 上有 3 个环境:Dev、Test 和 Prod。我有相同的管道来构建和部署每个环境的资源和代码,除了两个不同之处:
- 不同的触发分支
- 不同的变量值
这种情况的正确方法是什么?因为我想到了至少 3 个,但没有一个是完美的:
选项 1: 我想我可以在 Azure DevOps 上创建一个管道(由 3 个分支中的任何一个触发),每个环境有 3 个阶段,并为每个阶段添加一个运行条件,具体取决于源码分支,像这样:
condition: eq(variables['Build.SourceBranch'], 'refs/heads/a-branch-name')
并在每个阶段引用不同的变量。但这会在每个阶段引入代码重复——当添加或修改一个步骤时,我必须记住编辑 3 个阶段——这是不可取的。
选项 2: 在我的存储库中创建 3 个单独的 YAML 文件,每个文件都有指定的触发器分支并引用相同的变量名称,然后在 Azure DevOps 上创建 3 个不同的管道,每个文件具有不同的变量值。但这也会引入代码重复。
选项 3: 使用其中定义的步骤创建 1 个 build-and-deploy.yaml 文件作为模板,然后创建另外 3 个引用该模板的 YAML 文件,每个文件具有不同的触发器分支和不同的变量值在每个 Azure 管道中,如下所示:
trigger:
branches:
include:
- a-branch-name
steps:
- template: build-and-deploy.yaml
parameters:
parameterName1: $(parameterValue1)
parameterName2: $(parameterValue2)
这似乎是最好的选择,但我没有看到它在示例中的任何地方使用过,所以我可能只是没有意识到它的缺点,如果有的话。
【问题讨论】:
标签: azure-devops yaml azure-pipelines continuous-deployment azure-pipelines-yaml