为什么我不能在 Azure Pipeline YAML 配置文件中使用变量来定义环境 属性?

Why can't I use a variable to define the environment property in the Azure Pipeline YAML config file?

我正在尝试为所有 environments/stages 创建一个部署管道 YAML 模板。我已经在 Azure DevOps 上设置了环境,这样我就可以在测试和生产环境部署之前添加检查和批准。我为每个阶段设置了一个库组,每个阶段都有一个名为 'env' 的变量,它定义了管道中的当前阶段 运行。出于某种原因,部署作业下的环境 属性(请参阅下面的代码片段)不会读取该变量。

有没有人以前遇到过这个问题,或者为什么没有为特定的 属性 读取变量?

注意:我已经测试了变量并且它们确实有效,例如,阶段 属性 输出为 'deploy-dev/test/prod'(取决于环境)

- stage: deploy-$(env)
  jobs:
  - deployment: DeployWeb
    displayName: deploy Web App
    pool:
      vmImage: 'Ubuntu-latest'
    # creates an environment if it doesn't exist
    environment: 'smarthotel-$(env)'
    strategy:
      runOnce:
        deploy:
          steps:
          - script: echo Hello world

你不能这样做,因为它必须在编译阶段就知道。

但是你可以试试这个(让这个文件命名为 deploy.yml):

parameters:
- name: env
  type: string
  default: 'dev'

stages:
- stage: deploy-${{ parameters.env }}
  jobs:
  - deployment: DeployWeb
    displayName: deploy Web App
    pool:
      vmImage: 'Ubuntu-latest'
    # creates an environment if it doesn't exist
    environment: 'smarthotel-${{ parameters.env }}'
    strategy:
      runOnce:
        deploy:
          steps:
          - script: echo Hello world

然后您需要 运行 如下(在 build.yml 文件中):


stages:
- template: deploy.yml
  paramaters:
    env: dev
- template: deploy.yml
  paramaters:
    env: qa
- template: deploy.yml
  paramaters:
    env: prod