首页 > 解决方案 > YAML 抱怨“意外的属性扩展”

问题描述

我正在调查我们如何确保我们的 YAML 管道使用相同的步骤来执行例如单元测试的验证。我已经设置了几个环境,我认为我可以使用关于“必需模板”的“批准和检查”功能。

我实际上认为这会非常简单 - 但我无法让解析器/运行器引擎接受我的“扩展”配置。

我的 YAML 管道是这样的:

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    - script: echo Building!
- stage: Test
  jobs:
  - job: TestOnWindows
    steps:
    - script: echo Testing on Windows!
  - job: TestOnLinux
    steps:
    - script: echo Testing on Linux!
  - deployment: DeployToTest
    environment: 'Test'
- stage: Deploy
  jobs:
  - job: Deploy
    steps:
    - script: echo Deploying the code!
  - deployment: DeployToProd
    environment: 'Prod'

它真的什么也没做——除了处理几个阶段并批准相关环境的使用。

我以为我可以简单地extends在顶部添加属性 - 像这样:

extends:
  template: resource-template.yml

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    - script: echo Building!
- stage: Test
  jobs:
  - job: TestOnWindows
    steps:
    - script: echo Testing on Windows!
  - job: TestOnLinux
    steps:
    - script: echo Testing on Linux!
  - deployment: DeployToTest
    environment: 'Test'
- stage: Deploy
  jobs:
  - job: Deploy
    steps:
    - script: echo Deploying the code!
  - deployment: DeployToProd
    environment: 'Prod'

我的resource-template.yml文件是这个

# File: resource-template.yml
# steps:
#- script: echo Echoing from template!

换句话说 - 它完全是空的。

注意:这可以由错误的原因引起吗?我不能从空模板扩展?该文档对扩展管道的要求有点模糊。我还尝试向扩展模板添加触发器声明 - 结果相同。

编辑器用橙色曲线提醒我“意外的属性扩展”,如果我忽略它并尝试运行我的管道,我会收到错误“/azure-pipelines.yml (Line: 4, Col: 1): Unexpected value 'stages '"

我究竟做错了什么?我检查了 Azure Pipelines YAML 架构,找不到任何迹象表明我不应该做我所做的事情。

我调查的参考点是这个页面:https ://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#extend-from-a-template

我可以通过编写这样的阶段声明之一来重用我的模板:

- stage: Test
  jobs:
  - job: TestOnWindows
    steps:
    - template: resource-template.yml
    - script: echo Testing on Windows!
  - job: TestOnLinux
    steps:
    - script: echo Testing on Linux!
  - deployment: DeployToTest
    environment: 'Test'

但是模板的“包含”不会触发环境的批准/检查条件

谢谢 :-)

/杰斯珀

标签: azure-pipelinesazure-pipelines-yaml

解决方案


看起来没有办法通过从其他 yaml 扩展来覆盖阶段。也许考虑不同的方法..使用舞台模板?


推荐阅读