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

时间:2019-09-05 14:58:27

标签: azure file templates azure-devops pipeline

我正在Azure DevOps中建立几个管道。为了使我的团队生活更轻松,我正在使用作业模板。

这些作业模板仅在适合它们的位置存储在正确的存储库中。

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

这些模板中的某些任务运行powershell代码,我希望此代码位于脚本文件中,以便可重复使用并存储在与模板相同的存储库中。

当管道运行时,将嵌入模板,它会尝试在实际正在构建/部署的项目存储库中找到powershell脚本。

我该如何实现?

解决方法是拥有我真的不想拥有的内联代码。

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

谢谢

经过一番挖掘,我找不到任何方法来指定脚本文件作为模板中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

3 个答案:

答案 0 :(得分:1)

当前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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

假设,您是在Powershell脚本所在的回购中构建的-

尝试-

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

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