Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

YAML complaining about "unexpected property extends"

I am doing some investigation into how we an ensure that our YAML pipelines are using the same steps to do e.g. verification of unit tests. I have set up a couple of Environments and I thought that I could use the "Approval and checks" functionality with regards to "Required template".

I actually thought that it would be super simple - but I cannot get the parser/runner engine to accept my "extends" configuration.

My YAML-pipeline is this:

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'

It really does nothing - except for handling a few stages with approval on usage of the associated environments.

I thought that I could simply add the extends property at the top - like this:

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'

My resource-template.yml-file is this

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

In other words - it is completely empty.

Note: can this by the cause of the error? That I cannot extend from an empty template? The documentation is a bit vague on the requirements of the extended pipeline. I have also tried to add a trigger declaration to the extended template - with same result.

The editor alerts me with orange squiggles that "unexpected property extends" and if I ignore it and try to run my pipeline, I get the error "/azure-pipelines.yml (Line: 4, Col: 1): Unexpected value 'stages'"

What am I doing wrong? I have examined the Azure Pipelines YAML schema and cannot find any indication that I should not be able to do what I do.

The reference point of my investigation was this page: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#extend-from-a-template

I can re-use my template by writing one of my stage-declarations like this:

- 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'

But that "inclusion" of the template does not trigger the approval/check condition on the environment

Thank you :-)

/Jesper

like image 736
Jesper Lund Stocholm Avatar asked Sep 14 '25 03:09

Jesper Lund Stocholm


1 Answers

Look like there is no way to override stages by extending from other yaml. Maybe thinking of different approach.. Using stage template?

like image 122
Chayne P. S. Avatar answered Sep 17 '25 19:09

Chayne P. S.