Mar*_*icz 6 yaml continuous-deployment azure-devops azure-pipelines azure-pipelines-yaml
假设我在 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:build-and-deploy.yaml使用其中定义的步骤创建 1 个文件作为模板,然后创建另外 3 个引用该模板的 YAML 文件,每个文件在每个 Azure Pipeline 中都有不同的触发器分支和不同的变量值,如下所示:
trigger:
branches:
include:
- a-branch-name
steps:
- template: build-and-deploy.yaml
parameters:
parameterName1: $(parameterValue1)
parameterName2: $(parameterValue2)
Run Code Online (Sandbox Code Playgroud)
这似乎是最好的选择,但我没有看到它在示例中的任何地方使用过,所以也许我只是不知道它的缺点,如果有的话。
Ali*_*SFT 10
根据您的描述,如果您希望不同的阶段共享相同的repo资源,但它们的触发分支和变量值不同。
\n对于触发分支,可以使用表达式{{if ......}}来确定触发分支条件。
\n对于变量值,您可以定义模板和变量组以通过参数指定它们。
\n这里有一个例子,你可以参考\xef\xbc\x9a
\nazure-pipelines.yml\xef\xbc\x9a
\n样本\xef\xbc\x9a
\n stages:\n - template: stage/test.yml\n parameters:\n ${{if contains(variables[\'Build.SourceBranch\'], \'master\')}}:\n variableGroup: devGroup\n stageName: Dev\n test: a\n ${{if contains(variables[\'Build.SourceBranch\'], \'test\')}}:\n stageName: test\n test: b\nRun Code Online (Sandbox Code Playgroud)\n阶段/测试。yml\xef\xbc\x9a
\nparameters:\n- name: stageName\n displayName: Test\n type: string\n default: test\n \n- name: test\n displayName: Test\n type: string\n default: test\n\n- name: variableGroup\n displayName: Test\n type: string\n default: test\n\nstages:\n- stage: Test_${{ parameters.stageName }}\n variables: \n - group: ${{parameters.variableGroup}}\n jobs:\n - job: Test1\n pool:\n vmImage: vs2017-win2016\n steps:\n - script: echo "Hello Test1"\n - script: echo ${{ parameters.test }}\n - script: echo $(dev1)\nRun Code Online (Sandbox Code Playgroud)\n当然,如果想使用单个变量,可以直接在yaml中定义变量,无需添加变量组。
\nmax*_*x_i 10
以下是如何使用包含在特定于环境的管道中的共享管道配置来执行此操作。
要支持 2 个环境(dev和prod),您需要:
pipeline-shared.yml:
variables:
ARTIFACT_NAME: ApiBuild
NPM_CACHE_FOLDER: $(Pipeline.Workspace)/.npm
stages:
- stage: Build
displayName: Build
pool:
vmImage: 'ubuntu-latest'
demands: npm
jobs:
...
- stage: Release
displayName: Release
dependsOn: Build
pool:
vmImage: 'ubuntu-latest'
jobs:
...
Run Code Online (Sandbox Code Playgroud)
pipeline-dev.yml:
# Trigger builds on commits to branches
trigger:
- dev
# Do not trigger builds on PRs
pr: none
extends:
template: pipeline-shared.yml
Run Code Online (Sandbox Code Playgroud)
pipeline-prod.yml
trigger:
- master
pr: none
extends:
template: pipeline-shared.yml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3746 次 |
| 最近记录: |