我有一个Azure DevOps部署YAML管道,它创建一个并向其部署代码。实际的管道比较复杂,但我正在简化这个问题。
目前,我的管道可以成功地部署到特定的Azure订阅(Service ),并在变量中定义资源名称。
我需要将管道参数化,以便它可以使用多个服务连接器部署到几个不同的环境(即Azure订阅)。每个环境都有不同的Azure资源命名约定。
有没有办法从XML或JSON文件中读取管道变量的值?这样,我就可以为每个环境拥有多个配置文件,并将它们存储在我的存储库中。
这是一种适合于多环境部署管道配置的方法吗?
发布于 2022-05-31 21:06:19
您可以使用可变模板。还有另一个有趣的链接:了解有关使用模板的变量重用的更多信息。。
这里我有一个平面文件夹结构(为了示例的清晰性):
.
| deploy-app.job.yaml
| deploy-app.pipeline.yaml
| variables.dev.yaml
| variables.prod.yaml
因此,在这里,我们尝试使用不同的变量集运行reusable
作业deploy-app.Jobs. sets。
我在每个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'
在主管道中,我可以创建不同的阶段并注入所需的vairables:
# 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
根据您的需要,您可以添加多个变量模板,有一个命名约定等,这取决于您的管道的复杂性。
发布于 2022-05-30 12:15:56
通过使用XML转换,我们可以执行操作。检查下面的链接,以获得完整的步骤。
https://www.dragonspears.com/blog/how-to-handle-continuous-deployment-across-multiple-environments
这里提到的相同步骤可以在上面提到的链接中找到。
https://stackoverflow.com/questions/72427893
复制相似问题