【问题标题】:How can I pass a pre-defined pipeline build parameter to a template in Azure DevOps pipelines?如何将预定义的管道构建参数传递给 Azure DevOps 管道中的模板?
【发布时间】:2021-08-09 18:14:30
【问题描述】:

模板:

parameters:
- name: PathPrefix
  displayName: 'Path prefix'
  type: string
  default: ''

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet restore'
  inputs:
    command: restore
    projects: ${{parameters.PathPrefix}}**/$(Build.DefinitionName).sln

管道:

resources:
  repositories:
  - repository: devops
    name: foo/devops
    type: git
    ref: master

trigger:
  branches:
    include:
    - refs/heads/*

jobs:
- job: Job_1
  displayName: Agent job 1
  pool:
    vmImage: windows-latest
  steps:
  - checkout: self
  - template: azure/pipelines/pipeline.yaml@devops
    parameters:
      PathPrefix: $(Build.DefinitionName)

还原步骤中的运行错误:

##[error]No files matched the search pattern.

即使在恢复步骤中设置verbosityRestore: detailed 也没有给我更多信息。

如果我不设置PathPrefix,它似乎使用默认的空字符串并找到解决方案文件(在某些情况下)。但是,如果我确实设置了某些存储库中需要的前缀,它就找不到该文件。我尝试了在模板中引用参数的各种方法(${{}}$()$[] 和其他)以及在管道中指定它的不同方法,包括硬编码路径(尽管我想使用变量),但没有任何作用。

我认为也许变量会起作用,所以我也尝试在管道中指定变量并在模板中使用它们,但这会导致相同的错误。在模板中定义变量给了我一个模板编译错误(意外的标记“变量”或类似的东西)。

【问题讨论】:

  • 在黑暗中开枪,您是否尝试过添加引号来转义特殊字符? '${{parameters.PathPrefix}}**/$(Build.DefinitionName).sln'

标签: azure-devops azure-pipelines azure-pipelines-yaml


【解决方案1】:

看看你传递了什么,并在心里扩展结果。

${{parameters.PathPrefix}}**/$(Build.DefinitionName).sln

如果Build.DefinitionNamefoo,并且你将它作为PathPrefix 传递,那么你得到的是:

foo**/foo.sln

看起来你想要一个额外的正斜杠,所以你得到foo/**/foo.sln

【讨论】:

  • 我在 PathPrefix 中尝试使用和不使用斜杠,但均未成功。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多