web-dev-qa-db-ja.com

Azure DevOps:yamlテンプレートを他のyamlテンプレートの中に巣することは可能ですか?

他のyamlテンプレートの中にyamlテンプレートをネストすることは可能ですか?

私はさまざまなGitリポジトリに複数のNUGETプロジェクトを投稿しました。そして、Nuget.orgでNugetsを公開するプロセスをテンプレートしようとしています。

だから私は "devops-templates"という名前のGitリポジトリを作成しました、最初のyamlテンプレートを作成しました。グローバルYAMLテンプレート。

問題は、このグローバルテンプレートをマイパイプラインに使用しようとしたとき、私はエラーを取得しました

/Net/Utilities/BuildSolution.yml@templates (Line: 33, Col: 18): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 36, Col: 21): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 48, Col: 24): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 53, Col: 28): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 54, Col: 26): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 59, Col: 21): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 60, Col: 22): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 61, Col: 32): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 63, Col: 21): A template expression is not allowed in this context,/Net/Utilities/BuildSolution.yml@templates (Line: 64, Col: 26): A template expression is not allowed in this context

私はマイクロソフトのドキュメント内で検索されました: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templatess ?aazure-devops が情報を見つけられませんでした。それ。

ここで私のコードの一部の部分:

Azure-pipelines.yml(メインリポジトリ):

resources:
  repositories:
    - repository: templates
      type: github
      name: (...)/devops-templates
      ref: refs/tags/v1.1.0
      endpoint: (...)

stages:
- template: Net/Pipeline/NuGetsPipeline.yml@templates
  parameters:
    solution: $(solution)
    nuGetsArtifactName: $(nuGetsArtifactName)
    buildArtifactName : $(buildArtifactName)
    (...)
 _

Nugetspipeline.yml(devops-templatesリポジトリ):

parameters:
 nuGetsArtifactName: 'NuGets'
 buildArtifactName : 'Build'
 nuGetSource: https://api.nuget.org/v3/index.json
 solution: ''
 (...)

stages:

- stage: Build
  jobs:
  - template: ${{variables['System.DefaultWorkingDirectory']}}/Net/Utilities/BuildSolution.yml
    parameters:
      buildArtifactName : ${{ parameters.buildArtifactName }}
      (...)

  - template: ${{variables['System.DefaultWorkingDirectory']}}/Net/Utilities/GenerateNuGets.yml
    parameters:
      nuGetsArtifactName: ${{ parameters.nuGetsArtifactName }}
      buildArtifactName : ${{ parameters.buildArtifactName }}
      (...)

- stage: 'UnitTests'
  jobs:
  - template: ${{variables['System.DefaultWorkingDirectory']}}/Net/Utilities/RunUnitTests.yml
    parameters:
      buildArtifactName : ${{ parameters.buildArtifactName }}
      (...)

- stage: 'Publish'
  jobs:
  - template: ${{variables['System.DefaultWorkingDirectory']}}/Net/Utilities/PublishNuGets.yml
    parameters:
      nuGetsArtifactName: ${{ parameters.nuGetsArtifactName }}
      (...)
 _

BuildSolution.yml(devops-templateリポジトリ):

parameters:
  buildArtifactName: 'Build'
  solution: ''
  (...)

  jobs:
  - job: 'BuildSolution'
    pool:
        vmImage: ${{ parameters.vmImage }}
    continueOnError: false
    variables:
      artifactName: ${{ parameters.buildArtifactName }}
    steps:
      - task: NuGetCommand@2
        displayName: 'Restore NuGet packages'
        inputs:
          restoreSolution: ${{ parameters.solutionDir }}/${{ parameters.solution }}
          configuration: ${{ parameters.buildConfiguration}}

      - task: VSBuild@1
        (...)
 _

編集:コードの一部を追加しました。

8
Vianney Doleans

複雑なYAMLテンプレートを作成するときは、内蔵マクロ拡張から専用のマクロ言語に移動することをお勧めします。

たとえば, [〜#〜] erb [〜#〜] テンプレートのRubyのすべての電源を与えます。

[〜#〜] SMX [〜#〜] は、Yamlに優しいパッケージでPythonのすべての力を与えます。

そのようにあなたは範囲が限られていないので、関数、クラス、ループなどのようなものを使うことができます.

YAMLがテンプレートから派生していることを確認するために、プレコックスフックとリンターを使用できます。

http://pre-commit.com 最も簡単な事前コミットフレームワークのために。

0
Erik Aronesty