Azure DevOps 管道模板 - 如何连接参数

Luc*_*ugt 7 parameters templates string-concatenation azure-devops

整个下午我一直在尝试在 ADO 模板中连接参数。该参数是源路径,并且在模板中需要添加下一个文件夹级别。我想通过“简单”的串联来实现这一点。简化的模板采用参数并使用它来形成 PowerShell 脚本的 inputPath,如下所示:

parameters:
  sourcePath: ''

steps:   
- task: PowerShell@2
  inputs:
    filePath: 'PSRepo/Scripts/MyPsScript.ps1'
    arguments: '-inputPath ''$(sourcePath)/NextFolder''
Run Code Online (Sandbox Code Playgroud)

我尝试了多种方法来实现这种串联:

  • '$(sourcePath)/NextFolder'
    • 往上看
  • '$(variables.sourcePath)/NextFolder'
    • 我知道 sourcePath 不是变量,但尝试基于以下事实:在任务条件中使用参数显然仅在通过变量引用时才有效
  • '${{ 参数.sourcePath }}/NextFolder'

还有其他一些变体,都无济于事。我还尝试在模板中引入变量部分,但这是不可能的。

我在互联网上搜索了示例/文档,但没有直接答案,其他问题似乎暗示了某种解决方案,但不起作用。

如果有人能帮助我,我肯定会非常高兴。

提前致谢。

Fel*_*lix 6

我们可以在临时 yaml 文件中添加变量并将 sourcePath 传递给变量,然后我们就可以使用它了。这是我的演示脚本:

Main.yaml

resources:
  repositories:
    - repository: templates
      type: git
      name: Tech-Talk/template

trigger: none

variables:
  - name: Test
    value: TestGroup
    
pool:
  # vmImage: windows-latest
  vmImage: ubuntu-20.04

  
extends:
  template: temp.yaml@templates
  parameters:
    agent_pool_name: ''
    db_resource_path: $(System.DefaultWorkingDirectory)
    # variable_group: ${{variables.Test}}   
Run Code Online (Sandbox Code Playgroud)

临时yaml

parameters:
- name: db_resource_path
  default: ""   
# - name: 'variable_group'    
#   type: string    
#   default: 'default_variable_group'
- name: agent_pool_name
  default: ""
    
 
stages:
  - stage:      
    jobs:
    - job: READ
      displayName: Reading Parameters
      variables:
      - name: sourcePath
        value: ${{parameters.db_resource_path}}
#     - group: ${{parameters.variable_group}}
      steps:
      - script: |
          echo sourcePath: ${{variables.sourcePath}}
      - powershell: echo "$(sourcePath)"
Run Code Online (Sandbox Code Playgroud)

这里,我只使用workingDirectory作为测试路径。您也可以使用变量。附上我的构建结果: 在此输入图像描述 在此输入图像描述


Luc*_*ugt 2

谢谢玉君。与此同时,它确实发挥了作用。显然,肯定存在一些拼写错误,导致脚本无法正确执行,因为这些解决方案看起来像上面提到的选项之一。

parameters:
  sourcePath: ''

steps:   
- task: PowerShell@2
  inputs:
    filePath: 'PSRepo/Scripts/MyPsScript.ps1'
    arguments: '-inputPath ''$(sourcePath)/NextFolder''
Run Code Online (Sandbox Code Playgroud)