【问题标题】:AzureDevOps yaml template - expression as parameter default valueAzureDevOps yaml 模板 - 表达式作为参数默认值
【发布时间】:2021-08-24 08:00:55
【问题描述】:

我想将表达式作为参数的默认值,但我得到“在此上下文中不允许使用模板表达式” 由于模板不能有变量,除非它们只有变量(另一件事我没有得到......),我正在寻找其他替代方案。有人知道吗?

我正在尝试的是:

parameters:
  - name: paramOne
    default: ${{ lower(replace('$(System.TeamProject)',' ','')) }}
    type: string

编辑

这是一个完整的例子。这是 azure-pipelines.yml

trigger:
- main

pool:
  vmImage: windows-2019

steps:
- template: test-template.yml

这是 test-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 "如果您使用模板在管道中包含变量,则包含的模板只能用于定义变量"

【问题讨论】:

标签: azure-devops yaml azure-pipelines


【解决方案1】:

好的,那么我会提出以下解决方法

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

【讨论】:

  • 问题是如果你把变量放在一个模板里,这个模板只能有变量,没有别的-docs.microsoft.com/en-us/azure/devops/pipelines/process/…-"如果你使用模板在管道中包含变量,包含的模板只能用于定义变量”
  • 我不确定你的意思是什么限制,即什么不适合你?以上我用过很多次了
  • 我在原问题中添加了一个完整的例子
  • 知道了。那么您可能必须设置 var 内联。查看更新的答案
  • 好吧,我希望能找到更优雅的东西,但这行得通。令人惊讶的是,这不受支持。谢谢
【解决方案2】:

看来这是不可能的。我用这个测试过:

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

所以你看,当你使用它作为参数的默认值时,用于填充变量的相同语法不会做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多