我目前正在使用小型POC评估Azure Pipelines,我认为我遇到了一个限制,但想知道是否有人可以解决此问题。
这是我想要做的关键部分。
azure-pipelines.yml
variables:
- name: FavouriteSportsTeam
value: "Houston Rockets"
jobs:
- template: Build1.yml
parameters:
SportsTeam: $(FavouriteSportsTeam)
- template: Build2.yml
parameters:
SportsTeam: $(FavouriteSportsTeam)
Build1.yml
parameters:
SportsTeam: "A Default Team"
jobs:
- job: SportsTeamPrinter
steps:
- script: "echo ${{ parameters.SportsTeam }}"
现在,当我尝试运行此文件时,从azure-pipelines.yml文件传递的变量不会扩展,而是保留为“ $(FavouriteSportsTeam)”
是否可以将扩展变量作为参数传递给另一个文件?
答案 0 :(得分:3)
将变量作为参数传递给模板可以正常工作。您的问题是您错误地声明了变量。效果很好:
azure-pipelines.yml
variables:
FavouriteSportsTeam: "Houston Rockets"
jobs:
- template: Build1.yml
parameters:
SportsTeam: $(FavouriteSportsTeam)
- template: Build2.yml
parameters:
SportsTeam: $(FavouriteSportsTeam)
Build1.yml
parameters:
SportsTeam: "A Default Team"
jobs:
- job: SportsTeamPrinter
steps:
- script: "echo ${{ parameters.SportsTeam }}"
答案 1 :(得分:2)
我在模板中的部署作业中遇到了相同的问题,在该模板中,我尝试根据参数设置environment
。模板参数将接收运行时变量$(Environment)
。
问题在于,在解释传递给environment
的值时,运行时变量尚不可用。解决方案是不要以运行时语法传递变量,而是使用表达式语法 ${{ variables.environment }}
:
parameters:
- name: environment # don't pass run-time variables
jobs:
- deployment: DeployAppService
environment: ${{ parameters.environment }}
strategy: [...]
- stage: QA
variables:
Environment: QA
jobs:
- template: templates/deploy-appservice.yml
parameters:
environment: ${{ variables.environment }} # use expression syntax
如果您错误地传递了运行时变量$(Environment)
,则此字符串是部署作业将尝试命名Azure DevOps环境的字符串。我猜,由于这不是一个有效的名称,因此它将使用Test
作为后备名称,然后该名称会出现在“环境”菜单中。
答案 2 :(得分:0)
是,但是您必须使用format()
函数:
Inline: |
${{ format('$Tags = (Get-AzureRmResourceGroup -Name {0}).Tags
$Tags.Version = "$(Build.BuildNumber)"
$Tags.FailedVersion = "-"; Set-AzureRmResourceGroup -Name {0} -Tag $Tags',
parameters.resourceGroupName ) }}
这是一个例子。您还可以将其设置为多行以提高可读性。
https://github.com/Microsoft/azure-pipelines-agent/issues/1686
答案 3 :(得分:0)
我想在初始化变量之前先评估模板参数。这就是为什么您得到$(FavouriteSportsTeam)
而不是变量值的原因
我试图以不同的方式从变量中设置模板参数值,但是没有运气
在模板参数值中,可以使用format
来解析,也可以不使用(使用$ {{}}来解析),如
#template1
parameters:
poolname: dev4-kyiv
versionFile: ''
jobs:
- job: versionJob
pool:
name: ${{ parameters.poolname }}
steps:
- powershell: |
Write-Host ("${{ parameters.versionFile }}")
或带有局部模板变量
#template2
parameters:
releaseFilePath: ''
packageTags: ''
jobs:
- job: build
variables:
releaseNotesFile: '${{ parameters.releaseFilePath }}/releaseNotes.txt'
tags: '${{ parameters.packageTags }}'
但是我找不到使用模板的主脚本中的变量来设置模板参数值的方法。