Azure Pipelines:将变量作为参数传递给模板

MAH*_*ech 8 azure-devops

我目前正在用一个小的POC评估Azure Pipelines,我想我遇到了一个限制,但是想知道是否有人可以解决。

这是我正在尝试做的关键部分。

天蓝色管道

variables:
  - name: FavouriteSportsTeam
    value: "Houston Rockets"
jobs:
  - template: Build1.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
  - template: Build2.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
Run Code Online (Sandbox Code Playgroud)

Build1.yml

parameters:
  SportsTeam: "A Default Team"
jobs:
  - job: SportsTeamPrinter
    steps:
      - script: "echo ${{ parameters.SportsTeam }}"
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试运行此文件时,不会扩展从azure-pipelines.yml文件传递的变量,并将其保留为“ $(FavouriteSportsTeam)”

是否可以将扩展变量作为参数传递给另一个文件?

Krz*_*iak 7

这有效:

azure-pipelines.yml

variables:
  FavouriteSportsTeam: "Houston Rockets"
jobs:
  - template: Build1.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
  - template: Build2.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
Run Code Online (Sandbox Code Playgroud)

构建1.yml

parameters:
  SportsTeam: "A Default Team"
jobs:
  - job: SportsTeamPrinter
    steps:
      - script: "echo ${{ parameters.SportsTeam }}"
Run Code Online (Sandbox Code Playgroud)

  • 重要提示,这仅适用于像本例这样的静态变量,它们在代码中声明,并且是静态的,不会发生更改,因此编译器实际上可以使用编译时语法访问它们。但是,如果您的变量来自: - 变量组 - 在 UI 中设置 - 由另一个任务设置 目前无法将它们用作模板参数的输入。您确实需要在模板代码中使用运行时语法来引用它们。很烦人,但请记住这一点。发生这种情况是因为参数本身只能使用编译时表达式来引用。 (9认同)
  • 只是为了确认一下,这之所以有效,是因为我们更改了在“azure-pipelines.yml”中定义的变量“FavouriteSportsTeam”的方式? (2认同)

off*_*cer 7

我在模板中的部署作业遇到了同样的问题,我试图在其中设置environment依赖参数。模板参数将接收一个运行时变量$(Environment)

问题是在environment解释传递给的值时,运行时变量尚不可用。解决方案是不在运行时语法中传递变量,而是使用表达式语法 ${{ variables.environment }}

部署-appservice.yml

parameters:
- name: environment # don't pass run-time variables

jobs:
- deployment: DeployAppService
  environment: ${{ parameters.environment }}
  strategy: [...]
Run Code Online (Sandbox Code Playgroud)

azure-pipelines.yml

- stage: QA
  variables: 
    Environment: QA
  jobs:
  - template: templates/deploy-appservice.yml
    parameters:
      environment: ${{ variables.environment }} # use expression syntax
Run Code Online (Sandbox Code Playgroud)

如果错误地传递了运行时变量,$(Environment)此字符串就是部署作业将尝试命名 Azure DevOps 环境的字符串。我想,因为这不是一个有效的名称,它将Test用作后备名称,然后出现在环境菜单中。


我在我的个人网站上写了一篇关于管理部署环境的更详细的博客文章。