0

我们在 YAML 构建中广泛使用共享 YAML 模板。像这样的东西:

trigger: none

resources:
  repositories:
    - repository: templates
      type: git
      name: DFDevOps\cicd-templates
      ref: refs/tags/stable-1
      # http://tdc1tfsapp01:8080/tfs/DefaultCollection/DFDevOps/_git/cicd-templates

name: $(BuildVersionPrefix).$(DayOfYear)$(Date:HH)

jobs:
  - job: Build
    pool:
      demands: DotNetFramework
    workspace:
      clean: outputs
    timeoutInMinutes: 180
    steps:
      - checkout: self # self represents the repo where the initial Pipelines YAML file was found
        clean: true
        lfs: true

      - template: ci/ci-build.yml@templates
        parameters:
          releaseBranch: $(ReleaseBranch)

但是,共享的 YAML 模板通常需要执行 Powershell 代码。到目前为止,我们要么将其嵌入,要么将其放入模板加载的 PS 模块中。

我讨厌这两种方法。我讨厌嵌入,因为:

  1. 没有智能感应器
  2. 没有单元测试
  3. 没有关于管道故障的正确错误报告

我讨厌放入一个模块,因为它与原点分离并且需要大量开销。

我的问题 - 是否可以将 PS 代码放在与 YAML 模板相同的存储库中的专用 ps1 文件中,并在运行时提供它们?

4

1 回答 1

0

因此,checkout: self将引用该特定管道 YAML 所在的存储库 - 而不是模板存储库(除非它们是一个且相同的)。

我将添加第二个签出步骤 -checkout: templates在管道中,然后在您的 powershell 脚本任务的输入中(在模板中),指定您刚刚签出的脚本的路径:

        scriptType: filePath
        scriptPath: $(Build.SourcesDirectory)/templates/pathToscript.ps1

该模板只是在编译时就地展开到管道中,因此它应该可以访问该文件夹。您现在可以通过下载扩展的管道在 YAML 管道编辑器中验证这一点:下载完整的 YAML

于 2021-02-11T17:55:31.197 回答