AzureDevOps yaml 模板 - 表达式作为参数默认值
AzureDevOps yaml template - expression as parameter default value
我想要一个表达式作为参数的默认值,但我得到“在此上下文中不允许使用模板表达式”
由于模板不能有变量,除非它们只有变量(另一件事我没有得到......),我正在寻找其他选择。有人知道吗?
我正在尝试的是:
parameters:
- name: paramOne
default: ${{ lower(replace('$(System.TeamProject)',' ','')) }}
type: string
编辑
这是一个完整的例子。这是蔚蓝-pipelines.yml
trigger:
- main
pool:
vmImage: windows-2019
steps:
- template: test-template.yml
这是测试-template.yml:
parameters:
- name: paramOne
default: ${{ lower(replace(variables['System.TeamProject'],' ','')) }}
type: string
steps:
- task: PowerShell@2
displayName: "Run PowerShell script"
inputs:
targetType: 'inline'
script: Write-Host "${{parameters.paramOne}}"
这会导致错误:
“在此上下文中不允许使用模板表达式”
无法将变量添加到 test-template.yml,如下所示:
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#variable-reuse
“如果您使用模板在管道中包含变量,则包含的模板只能用于定义变量”
好的,那么我会提出以下解决方法
parameters:
- name: paramOne
displayName: 'My param. Leave empty to populate with default value (project name). bla bla...'
default: ''
type: string
steps:
- task: PowerShell@2
name: 'setVar'
inputs:
targetType: inline
script: |
if( "${{ parameters.paramOne }}" -eq "") {
$val = "$(System.TeamProject)".ToLower().Replace(" ","")
} else {
$val = "${{ parameters.paramOne }}"
}
echo "##vso[task.setvariable variable=varOne]$val"
并从那里开始使用 varOne
而不是 paramOne
看来这不可能。我用这个测试过:
parameters:
- name: paramOne
default: $[lower(replace(variables['System.TeamProject'],' ',''))]
type: string
- name: paramTwo
default: $(runtimeVar)
type: string
- name: paramThree
default: $(compileVar)
type: string
steps:
- task: PowerShell@2
displayName: "Run PowerShell script"
inputs:
targetType: 'inline'
script: |
Write-Host "${{parameters.paramOne}}"
Write-Host "${{parameters.paramTwo}}"
Write-Host "${{parameters.paramThree}}"
和
trigger: none
variables:
runtimeVar: $[lower(replace(variables['System.TeamProject'],' ',''))]
compileVar: ${{ lower(replace(variables['System.TeamProject'],' ','')) }}
pool:
vmImage: windows-2019
steps:
- template: parameter-with-default-runtime-template.yml
我得到了:
$[lower(replace(variables['System.TeamProject'],' ',''))]
devopsmanual
devopsmanual
所以你看,当你将它用作参数的默认值时,用于填充变量的相同语法并不相同。
我想要一个表达式作为参数的默认值,但我得到“在此上下文中不允许使用模板表达式” 由于模板不能有变量,除非它们只有变量(另一件事我没有得到......),我正在寻找其他选择。有人知道吗?
我正在尝试的是:
parameters:
- name: paramOne
default: ${{ lower(replace('$(System.TeamProject)',' ','')) }}
type: string
编辑
这是一个完整的例子。这是蔚蓝-pipelines.yml
trigger:
- main
pool:
vmImage: windows-2019
steps:
- template: test-template.yml
这是测试-template.yml:
parameters:
- name: paramOne
default: ${{ lower(replace(variables['System.TeamProject'],' ','')) }}
type: string
steps:
- task: PowerShell@2
displayName: "Run PowerShell script"
inputs:
targetType: 'inline'
script: Write-Host "${{parameters.paramOne}}"
这会导致错误: “在此上下文中不允许使用模板表达式”
无法将变量添加到 test-template.yml,如下所示: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#variable-reuse “如果您使用模板在管道中包含变量,则包含的模板只能用于定义变量”
好的,那么我会提出以下解决方法
parameters:
- name: paramOne
displayName: 'My param. Leave empty to populate with default value (project name). bla bla...'
default: ''
type: string
steps:
- task: PowerShell@2
name: 'setVar'
inputs:
targetType: inline
script: |
if( "${{ parameters.paramOne }}" -eq "") {
$val = "$(System.TeamProject)".ToLower().Replace(" ","")
} else {
$val = "${{ parameters.paramOne }}"
}
echo "##vso[task.setvariable variable=varOne]$val"
并从那里开始使用 varOne
而不是 paramOne
看来这不可能。我用这个测试过:
parameters:
- name: paramOne
default: $[lower(replace(variables['System.TeamProject'],' ',''))]
type: string
- name: paramTwo
default: $(runtimeVar)
type: string
- name: paramThree
default: $(compileVar)
type: string
steps:
- task: PowerShell@2
displayName: "Run PowerShell script"
inputs:
targetType: 'inline'
script: |
Write-Host "${{parameters.paramOne}}"
Write-Host "${{parameters.paramTwo}}"
Write-Host "${{parameters.paramThree}}"
和
trigger: none
variables:
runtimeVar: $[lower(replace(variables['System.TeamProject'],' ',''))]
compileVar: ${{ lower(replace(variables['System.TeamProject'],' ','')) }}
pool:
vmImage: windows-2019
steps:
- template: parameter-with-default-runtime-template.yml
我得到了:
$[lower(replace(variables['System.TeamProject'],' ',''))]
devopsmanual
devopsmanual
所以你看,当你将它用作参数的默认值时,用于填充变量的相同语法并不相同。