如何将预定义的管道构建参数传递给 Azure DevOps 管道中的模板?

时间:2021-05-20 13:27:12

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

模板:

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

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

1 个答案:

答案 0 :(得分:0)

看看你通过了什么,并在精神上扩展结果。

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

如果 Build.DefinitionNamefoo,并且您将其作为 PathPrefix 传入,那么您得到的是:

foo**/foo.sln

看起来你想要在那里多一个正斜杠,所以你得到 foo/**/foo.sln