我有一个复杂的管道,多个项目使用它进行集成测试。它在根 Yaml 中定义资源,并且在大多数情况下使用“签出”将相关存储库签出到测试代理,然后将其复制到测试主机并安装。然而,对于一个项目来说,由于存储库大小,这种方法会增加 20 - 30 分钟,因此决定将相关分支信息传递给测试主机,然后从那里执行 git pull。
一切工作正常,但我们注意到有 2 个字段正在输入分支信息,这导致了混乱。第一个是标准资源定义对话框被忽略,信息是从手动输入的文本字段输入的。由于这可能会导致错误,因此进行了更改以删除文本字段并传递所选资源的分支。然而,尝试引用被证明是有问题的
以下是根 yaml 的清理版本:
parameters:
- name: resourceTypes
...
- name: deployEXE
...
trigger: ...
resources:
pipelines:
- pipeline: ...
repositories:
- repository: TestData
type: git
name: testdata
ref: refs/heads/master
extends:
template: pipeline-template.yml
parameters:
jobName: 'Nightly Testing'
testHost: 'VM Name'
testTask: '.'
deployExe: ${{parameters.deployExe}}
checkoutTemplate: checkout-steps.yml
postTestTemplate: post-test-steps.yml
agentPool: test-agents
agentName: VTMAGENT
usesTemplate:
repositories:
- TestData
hasOtherOutput: true
timeoutInMinutes: 180
additionalData:
- ${{parameters.resourceTypes}}
- ${{resources.repositories.TestData.ref}}
底线是问题所在。 使用双括号 $
{{resources.repositories.TestData.ref}}
引用存储库会生成错误,指出 resources
是未知名称
使用单括号引用
$(resources.repositories.TestData.ref)
将其作为文字字符串传递,因此 git pull 尝试拉取名为 $(resources.repositories.TestData.ref)
的分支
是否可以引用repo信息并将其传递给模板?
存储库资源的元数据以运行时变量的形式可供所有作业使用。
代替:
additionalData:
- ${{parameters.resourceTypes}}
- ${{resources.repositories.TestData.ref}}
尝试
additionalData:
- ${{parameters.resourceTypes}}
- $[ resources.repositories.TestData.ref ]
或者,作为替代方案:
variables:
ref: $[ resources.repositories.TestData.ref ]
# .....
additionalData:
- ${{ parameters.resourceTypes }}
- $(ref)