如何处理 Azure DevOps YAML 管道中的跨存储库脚本路径?

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

我正在处理涉及不同项目中的两个存储库(Repo1 和 Repo2)的多存储库 Azure DevOps 设置,并且从共享 YAML 管道模板调用 PowerShell 脚本时遇到路径引用一致的问题。

设置:

  1. Repo1(项目1)包含:

    • 管道 pipeline1.yaml,它调用 YAML 模板 pipeline_template.yaml。

    • 模板 pipeline_template.yaml 然后调用位于 helper_scripts/script.ps1 中的 PowerShell 脚本 script.ps1。

  2. Repo2(项目2)包含:

    • 管道 pipeline2.yaml,它从 Repo1 调用相同的 pipeline_template.yaml。

但是,当我从 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) 
    




powershell azure-devops azure-pipelines pipeline azure-pipelines-yaml
1个回答
0
投票

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'
© www.soinside.com 2019 - 2024. All rights reserved.