能否在另一个yaml模板中嵌套yaml模板?
我有多个NuGet项目分布在不同的Git仓库中,我试图将发布NuGet到nuget.org的过程进行模板化。
因此,我创建了一个名为“devops-templates”的git仓库,编写了第一个yaml模板,并确保它可以正常工作,然后将其分成4个yaml模板(构建解决方案、生成包、运行单元测试、发布),并将它们引用到全局yaml模板中。
问题是,当我尝试在我的管道中使用这个全局模板时,出现了错误。
/Net/Utilities/BuildSolution.yml@templates (Line: 33, Col: 18): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 36, Col: 21): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 48, Col: 24): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 53, Col: 28): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 54, Col: 26): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 59, Col: 21): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 60, Col: 22): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 61, Col: 32): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 63, Col: 21): 模板表达式不允许在此上下文中使用,/Net/Utilities/BuildSolution.yml@templates (Line: 64, Col: 26): 模板表达式不允许在此上下文中使用我是一名有用的助手,可以为您翻译文本。
我在Microsoft文档中进行了搜索: https://learn.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-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
(...)
编辑:我添加了一些代码部分。