azure-devops - Azure Devops:是否可以将 yaml 模板嵌套在另一个 yaml 模板中?
问题描述
是否可以将 yaml 模板嵌套在另一个 yaml 模板中?
我在不同的 Git 存储库中有多个 NuGet 项目,我正在尝试模板化在 nuget.org 上发布 NuGet 的过程。
所以我创建了一个名为“devops-templates”的 git 仓库,做了第一个 yaml 模板,确保它可以工作,然后将它分成 4 个 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
我在 Microsoft 文档中进行了搜索:https ://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-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 模板存储库):
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 模板存储库):
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
(...)
编辑:我添加了我的代码的一些部分。
解决方案
您的 BuildSolution.yml 中似乎存在缩进错误。参数和作业应该有相同的缩进。参考以下:
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}}
推荐阅读
- windows - Cassandra - "The system cannot find the file specified"
- c# - 如何根据范围查询结果删除 Azure 表实体
- python - 如何在 Tensorflow 中将不同的变量传递给 while 循环的主体和条件?
- gerrit - 如何限制项目所有者的访问
- javascript - 如何使用电子 webContents.print([options], [callback]) 打印 html/文本文件?
- dart - 如何使用文本小部件设置多行文本?
- angular - 如何解决在 Angular 6 中为业力测试抛出的 [object ErrorEvent]
- themes - 将类添加到 Shopware 主题插件
- java - 什么时候使用 Reactor 处理器有意义?
- ios - 使用 CocoaPods 指定库的版本