我们可以将变量作为参数(作为列表)传递吗?
以下代码不起作用。这意味着它没有将其作为列表,而是将其作为一个参数作为整个字符串。例如:
我们有$(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)
有什么解决方法吗?
这是不可能的。 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感兴趣。
总而言之,我认为在一个变量中包含列表,目前尚无法实现。