如何参数化 Azure DevOps 部署 YAML 管道以部署到多个环境
How to parametrize Azure DevOps Deployment YAML Pipelines to deploy to multiple environments
我有一个 Azure DevOps 部署 YAML 管道,它创建一个 Azure 应用服务并将代码部署到它。实际流水线比较复杂,不过我针对这个问题做了简化。
目前,我的管道可以成功部署到具有在变量中定义的资源名称的特定 Azure 订阅(服务连接器)。
我需要对管道进行参数化,以便它可以使用多个服务连接器部署到多个不同的环境(即 Azure 订阅)。每个环境都有不同的 Azure 资源命名约定。
有没有办法从 XML 或 JSON 文件中读取管道变量的值?这样我就可以为每个环境拥有多个配置文件并将它们存储为我的存储库的一部分。
这是多环境部署管道配置的正确方法吗?
利用XML变换,我们就可以进行运算了。检查下面的 link 以获得完整的步骤。
https://www.dragonspears.com/blog/how-to-handle-continuous-deployment-across-multiple-environments
- 创建不同的阶段。
- 使用 XML 转换器创建构建转换
- 另一种选择是利用“XML 变量替换。”与纯文本转换文件相比,敏感信息可以在 Azure Pipelines 中存储和保护。
- 持续部署
此处提到的相同步骤在上面提到的 link 中可用。
您可以使用 variable templates. There is another interesting link: Learn more about variable reuse with templates.
这里我有这个平面文件夹结构(为了样本的清晰度):
.
| deploy-app.job.yaml
| deploy-app.pipeline.yaml
| variables.dev.yaml
| variables.prod.yaml
所以我们在这里尝试 运行 reusable
作业 deploy-app。job.yaml 使用不同的变量集。
我在每个 variable.{env}.yaml
文件中定义了一些变量
# variables.dev.yaml
variables:
vmImage: ubuntu-20.04
serviceConnection: dev-service-connection
# variables.prod.yaml
variables:
vmImage: ubuntu-20.04
serviceConnection: prod-service-connection
deploy-app.job.yaml
文件接受允许注入变量模板的参数:
# deploy-app.job.yaml
parameters:
- name: envVariablesTemplate
type: string
jobs:
- deployment: deploy
variables:
# Inject the verianle template here
- template: ${{ parameters.envVariablesTemplate }}
pool:
# Use the variable from the template
vmImage: ${{ variables.vmImage }}
strategy:
runOnce:
deploy:
steps:
- task: AzureCLI@2
displayName: Hello from azure cli
inputs:
# Use the variable from the template
azureSubscription: ${{ variables.serviceConnection }}
scriptType: pscore
scriptLocation: inlineScript
inlineScript: echo 'Hello from azure cli'
在主管道中,我可以创建不同的阶段并注入所需的变量:
# deploy-app.pipeline..yaml
stages:
- stage: dev
condition: succeeded()
jobs:
- template: ./deploy-app.job.yaml
parameters:
envVariablesTemplate: ./variables.dev.yaml
- stage: prod
dependsOn: dev
condition: succeeded()
jobs:
- template: ./deploy-app.job.yaml
parameters:
envVariablesTemplate: ./variables.prod.yaml
根据您的需要,您可以添加多个变量模板、具有命名约定等。完全由您决定并取决于您的管道的复杂性。
我有一个 Azure DevOps 部署 YAML 管道,它创建一个 Azure 应用服务并将代码部署到它。实际流水线比较复杂,不过我针对这个问题做了简化。
目前,我的管道可以成功部署到具有在变量中定义的资源名称的特定 Azure 订阅(服务连接器)。
我需要对管道进行参数化,以便它可以使用多个服务连接器部署到多个不同的环境(即 Azure 订阅)。每个环境都有不同的 Azure 资源命名约定。
有没有办法从 XML 或 JSON 文件中读取管道变量的值?这样我就可以为每个环境拥有多个配置文件并将它们存储为我的存储库的一部分。
这是多环境部署管道配置的正确方法吗?
利用XML变换,我们就可以进行运算了。检查下面的 link 以获得完整的步骤。
https://www.dragonspears.com/blog/how-to-handle-continuous-deployment-across-multiple-environments
- 创建不同的阶段。
- 使用 XML 转换器创建构建转换
- 另一种选择是利用“XML 变量替换。”与纯文本转换文件相比,敏感信息可以在 Azure Pipelines 中存储和保护。
- 持续部署
此处提到的相同步骤在上面提到的 link 中可用。
您可以使用 variable templates. There is another interesting link: Learn more about variable reuse with templates.
这里我有这个平面文件夹结构(为了样本的清晰度):
.
| deploy-app.job.yaml
| deploy-app.pipeline.yaml
| variables.dev.yaml
| variables.prod.yaml
所以我们在这里尝试 运行 reusable
作业 deploy-app。job.yaml 使用不同的变量集。
我在每个 variable.{env}.yaml
文件中定义了一些变量
# variables.dev.yaml
variables:
vmImage: ubuntu-20.04
serviceConnection: dev-service-connection
# variables.prod.yaml
variables:
vmImage: ubuntu-20.04
serviceConnection: prod-service-connection
deploy-app.job.yaml
文件接受允许注入变量模板的参数:
# deploy-app.job.yaml
parameters:
- name: envVariablesTemplate
type: string
jobs:
- deployment: deploy
variables:
# Inject the verianle template here
- template: ${{ parameters.envVariablesTemplate }}
pool:
# Use the variable from the template
vmImage: ${{ variables.vmImage }}
strategy:
runOnce:
deploy:
steps:
- task: AzureCLI@2
displayName: Hello from azure cli
inputs:
# Use the variable from the template
azureSubscription: ${{ variables.serviceConnection }}
scriptType: pscore
scriptLocation: inlineScript
inlineScript: echo 'Hello from azure cli'
在主管道中,我可以创建不同的阶段并注入所需的变量:
# deploy-app.pipeline..yaml
stages:
- stage: dev
condition: succeeded()
jobs:
- template: ./deploy-app.job.yaml
parameters:
envVariablesTemplate: ./variables.dev.yaml
- stage: prod
dependsOn: dev
condition: succeeded()
jobs:
- template: ./deploy-app.job.yaml
parameters:
envVariablesTemplate: ./variables.prod.yaml
根据您的需要,您可以添加多个变量模板、具有命名约定等。完全由您决定并取决于您的管道的复杂性。