Jesper Lund Stocholm
Jesper Lund Stocholm

Reputation: 2013

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

Upvotes: 4

Views: 6370

Answers (1)

Chayne P. S.
Chayne P. S.

Reputation: 1638

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

Upvotes: 2

Related Questions