我们如何将变量作为参数传递(作为列表)

问题描述 投票:0回答:1

我们可以将变量作为参数(作为列表)传递吗?

以下代码不起作用。这意味着它没有将其作为列表,而是将其作为一个参数作为整个字符串。例如:

我们有$(templateParm)= dir1 / dir2,dir3 / dir4

  • -模板:dockerBuild.yml

    参数:

      DOCKER_FILE: [ "$(templateParm)" ]
      SOURCE_BRANCH_NAME: $(Build.SourceBranchName)
      BUILD_NUMBER: $(Build.BuildNumber)
      SOURCE_DIR: $(Build.SourcesDirectory)   
    

如果我们像下面那样在此处传递值,它将作为列表。这意味着它将其作为2个参数。

  • -模板:dockerBuild.yml

    参数:

      DOCKER_FILE: [ "dir1/dir2", "dir3/dir4" ]
      SOURCE_BRANCH_NAME: $(Build.SourceBranchName)
      BUILD_NUMBER: $(Build.BuildNumber)
      SOURCE_DIR: $(Build.SourcesDirectory)
    

有什么解决方法吗?

bash arraylist azure-devops yaml parameter-passing
1个回答
0
投票

这是不可能的。 TemplateParam将始终是字符串。但是您可以尝试其他方法。

如果您以这种方式定义模板:

#template.yaml
parameters:
- name: 'DOCKER_FILES'
  type: object
  default: {}
- name: 'server'
  type: string
  default: ''

steps:
- ${{ each dockerFile in parameters.DOCKER_FILES }}:
  - script: echo ${{ parameters.server }}:${{ dockerFile }}

并在其中构建


pool:
  vmImage: 'ubuntu-latest'

steps:
- template: template.yaml
  parameters:
    DOCKER_FILES: 
    - "dir1/dir2"
    - "dir3/dir4"
    server: someServer

但是在这种情况下,您仍然需要分开放置它们。至少目前,变量被视为字符串。

我也尝试过这种方法:Pass pipeline variable from Designer to YAML job template,但是得到了相同的结果。

并尝试过这样的事情:

variables:
- name: templateParam
  value: "dir1/dir2,dir3/dir4"

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
        $array = $variable.Split(',)
        Write-Host "##vso[task.setvariable variable=templateParamArray]$array"
- template: template.yaml
  parameters:
    instances: 
    ${{ each s in templateParamArray }}:
      - ${{ s }}:
    server: someServer

但是没有成功。您也可以对此developer community topic感兴趣。

总而言之,我认为在一个变量中包含列表,目前尚无法实现。

© www.soinside.com 2019 - 2024. All rights reserved.