как мы можем передать переменную в качестве параметров (в виде списка) - PullRequest
0 голосов
/ 07 мая 2020

Можно ли передать переменную в качестве параметров (в виде списка)?

Код ниже не работает. Это означает, что он не принимает его как список, он принимает его как один параметр как целую строку. Например:

У нас есть $ (templateParm) = dir1 / dir2, dir3 / dir4

  • -template: dockerBuild.yml

    параметры:

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

Если мы передаем здесь значение, как показано ниже, оно принимает его как список. Это означает, что он принимает его как 2 параметра.

  • -template: dockerBuild.yml

    параметры:

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

есть какое решение?

1 Ответ

0 голосов
/ 07 мая 2020

Это невозможно. 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

Однако в этом случае вы еще нужно поставить их отдельно. Переменные, по крайней мере, на данный момент считаются строковыми.

Я также пробовал этот подход: Передать конвейерную переменную из дизайнера в шаблон задания YAML но я получил тот же результат.

РЕДАКТИРОВАТЬ

Это ниже не работает. Я только хотел показать то, что пытался сэкономить ваше время.

И я пробовал что-то вроде этого:

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

Но безуспешно. Вы также можете быть заинтересованы в этом сообществе разработчиков topi c.

Подводя итог, я думаю, что в настоящий момент невозможно достичь того, чего вы хотите достичь, имея список в одном переменная.

...