当这些模板驻留在独立的存储库中时,是否可以引用 Azure DevOps 管道模板中的文件?

Is it possible to refrence files inside Azure DevOps pipeline templates when these templates reside in a standalone repo?

我正在 Azure DevOps 中设置多个管道。为了让我的团队生活更轻松,我使用了工作模板。

这些作业模板在一个合适的存储库中,专为它们而设。

对于每个管道,我定义存储库以从中获取模板。

这些模板中的一些任务 运行 powershell 代码,我希望这段代码在脚本文件中,可以重复使用并存储在与模板相同的 repo 中。

当管道 运行s 嵌入模板时,它会尝试在项目回购中找到 powershell 脚本,实际上是 built/deployed。

我怎样才能做到这一点?

解决方法是使用内联代码,但我真的不想使用它。

任何建设性的回答将不胜感激。

谢谢

经过一番挖掘,我找不到任何方法来将脚本文件指定为模板中 powershell 任务的源。

内部管道定义:

resources:
  repositories:
    - repository: templates
      type: git
      name: deploy-templates

variables:
  artifactName: 'Trade Data ETL - $(Build.SourceBranchName)'

stages:
- stage: Build
  displayName: Build
  variables:
  - group: DEV-Credential-Group
  - group: COMMON-Settings-Group

  jobs:
  - template: ssis/pipelines/stage-build.yml@templates  # Template reference
    parameters:
      artifactName: '$(artifactName)'

内部模板文件:

- task: PowerShell@2
    inputs:
      filePath: ssis/pipelines/scripts/build-ssis-project.ps1
      arguments: '-ProjectToBuild "tradedata-ldz-ssis/tradedata-ldz-ssis.dtproj'
      pwsh: true

您可以从源目录复制脚本文件。目前,您还没有提到根文件夹 -

ssis/pipelines/scripts/build-ssis-project.ps1

假设,您正在构建 powershell 脚本所在的存储库 -

尝试 -

- task: PowerShell@1
  inputs:
      scriptName: '$(ScriptsDir)/ssis/pipelines/scripts/build-ssis-project.ps1'

传递 ScriptsDir 的值,它可以是构建源目录或构建工作目录

2021 年更新

根据 docs.microsoft.com,您现在还可以检出多个存储库而无需自定义脚本。 如果您签出多个存储库,则会在 $(Build.SourcesDirectory).

下方创建一个包含该存储库的单独文件夹

您可以像这样定义多个存储库:

resources:
  repositories:
    - repository: devops
      type: git
      name: DevOps
      ref: main
    - repository: infrastructure
      type: git
      name: Infrastructure
      ref: main

并在步骤中简单地检查它们如下:

steps:
 - checkout: self
 - checkout: devops
 - checkout: infrastructure
 # List all available repositories
 - script: ls

原答案

目前resources命令只支持其他仓库的yml文件。但是,您可以简单地检出任务中的存储库,然后 运行 所需的 powershell 脚本。

steps:
- task: PowerShell@2
  inputs:
    targetType: inline
    script: |
      git clone -b <your-desired-branch> https://azuredevops:$($env:token)@dev.azure.com/<your-organization>/<your-project>/_git/<your-repository> <target-folder-name>      
      ./<target-folder-name>/foo.ps1
  env:
    token: $(System.AccessToken)

此脚本将签出任意分支并在目标存储库的根目录中执行脚本 foo.ps1

在模板文件中调用- checkout: templates。这可能仅在您插入模板时有效,但它成功地看到存储库资源并将其拉下。