我正在处理涉及不同项目中的两个存储库(Repo1 和 Repo2)的多存储库 Azure DevOps 设置,并且从共享 YAML 管道模板调用 PowerShell 脚本时遇到路径引用一致的问题。
设置:
Repo1(项目1)包含:
管道 pipeline1.yaml,它调用 YAML 模板 pipeline_template.yaml。
模板 pipeline_template.yaml 然后调用位于 helper_scripts/script.ps1 中的 PowerShell 脚本 script.ps1。
Repo2(项目2)包含:
但是,当我从 Repo2 运行 pipeline2.yaml 时,我会收到 script.ps1 的“文件未找到”错误,除非我使用路径 Repo1/helper_scripts/script.ps1 而不是 helper_scripts/script.ps1。
有没有办法在 pipeline_template.yaml 中设置一致或动态文件路径,从而允许从 Repo1 和 Repo2 调用时正确引用 script.ps1 ?我想避免每个存储库的硬编码路径,并尽可能保持参考通用。关于如何构建文件路径或配置管道模板以实现此目的有什么建议吗?
谢谢您的指导!
pipeline_template.yaml:
- name: parameter1
type: string
- name: parameter2
type: string
jobs:
- job: Job1
steps:
- checkout: self
- task: AzureCLI@2
inputs:
azureSubscription: '$(GLOBAL_SERVICE_CONNECTION)'
scriptType: 'pscore'
scriptLocation: 'scriptPath'
scriptPath: 'helper_scripts/script.ps1'
arguments: '-WebhookURL "${{ parameters.parameter1 }}" -KeyVaultsToCheck "${{ parameters.parameter2 }}"'
env:
GLOBAL_SUBSCRIPTION: $(GLOBAL_SUBSCRIPTION)
checkout: self
仅下载当前存储库 (Repo2)。您可以检查管道中的多个存储库:
- name: parameter1
type: string
- name: parameter2
type: string
jobs:
- job: Job1
steps:
- checkout: Repo1
- checkout: self
- task: AzureCLI@2
inputs:
azureSubscription: '$(GLOBAL_SERVICE_CONNECTION)'
scriptType: 'pscore'
scriptLocation: 'scriptPath'
scriptPath: '$(System.DefaultWorkingDirectory)/Repo1/helper_scripts/script.ps1'
arguments: '-WebhookURL "${{ parameters.parameter1 }}" -KeyVaultsToCheck "${{ parameters.parameter2 }}"'
env:
GLOBAL_SUBSCRIPTION: $(GLOBAL_SUBSCRIPTION)
在这种情况下,您可以将模板和引用的脚本移动到单独的存储库,以便对 Repo1 和 Repo2 使用一种方法。
- checkout: TemplateRepo
- checkout: self
......
scriptPath: '$(System.DefaultWorkingDirectory)/TemplateRepo/helper_scripts/script.ps1'