'Azure yaml pipeline using "extends"

I am trying to use extends as part of my pipeline. I am trying to get the first basic step working from Azure docs ie

    # pythonparameter-template.yml
    parameters:
    - name: usersteps
      type: stepList
      default: []
    steps:
    - ${{ each step in parameters.usersteps }}
      - ${{ step }}

# azure-pipelines.yml
trigger: none

resources:
  repositories:
  - repository: CI-CD-Templates
    type: git
    name: /CI-CD-Templates
    ref: refs/heads/master

extends:
  template: /pythonparameter-template.yml@CI-CD-Templates
  parameters:
    usersteps:
    - script: echo This is my first step
    - script: echo This is my second step

I keep getting the below error:

The directive 'each' is not allowed in this context. Directives are not supported for expressions that are embedded within a string. Directives are only supported when the entire value is an expression Unexpected value '${{ each step in parameters.usersteps }} - ${{ step }}'

Also after I extend from a template can azure-pipelines.yml also have it's own custom steps ie

# azure-pipelines.yml
resources:
  repositories:
  - repository: templates
    type: git
    name: MyProject/MyTemplates
    ref: tags/v1

extends:
  template: template.yml@templates
  parameters:
    usersteps:
    - script: echo This is my first step
    - script: echo This is my second step
steps:
- template: /validation-template.yml@CI-CD-Templates
 parameters:
  commitMessage: $(commitMessage)

- template: /shared-template.yml@CI-CD-Templates
 parameters:
 buildArtifactDir: $(buildArtifactDir)


Solution 1:[1]

Update

Please refer the response in this DC link-- Yaml extends feature erroring out when looping through steps.

?The YAML has a validation task in #pythonparameter-template.yml Comment out these 2 lines and your YAML will succeed. The template shown here is preventing any tasks to be used. This could be a scenario for someone with specific security requirements.

  ${{ if eq(pair.key, 'task') }}:
    '${{ pair.value }}': error

Are you trying to combine two yml pythonparameter-template.yml azure-pipelines.yml in the same file? It's not supported.

    parameters:
    - name: usersteps
      type: stepList
      default: []
    steps:
    - ${{ each step in parameters.usersteps }}
      - ${{ step }}
  

According to the error Directives are not supported for expressions that are embedded within a string. Directives are only supported when the entire value is an expression Unexpected value '${{ each step in parameters.usersteps }} - ${{ step }}'

You maybe use the wrong format. About the formats you could refer our official doc here-- Template types & usage

Besides, you can make azure-pipelines.yml also have it's own custom steps. But you need to put them under parameters in the pipeline, not like the way you use.

azure-pipelines.yml

trigger:
- master

extends:
  template: pythonparameter-template.yml
  parameters:
    buildSteps:  
      - bash: echo Test #Passes
        displayName: succeed
      - bash: echo "Test"
        displayName: succeed
      - script: echo "Script Test" 
        displayName: Fail

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1