tono1
tono1

Reputation: 1

Azure Pipelines YAML: Declaring parameters in template file and parent file

I am developing a pipeline in Azure DevOps. I have a pipeline with three stages:

  1. Build
  2. Deploy to TEST
  3. Deploy to PROD

In the pipeline, I have a parameter which captures the commit message:

parameters: # doesnt seem to work with template use
- name: CommitMessage
  displayName: Enter commit message
  type: string

I have a deployment template file with parameters for stages 2-3.

parameters: # defaults for any parameters that aren't specified
  - name: environment_name
      displayName: Environment name/type
      type: string
  - name: variable_group
      displayName: Variable Group
      type: string
  - name: solution_name
      displayName: Solution Name
      type: string
  - name: deployment_settings_file_name
      displayName: Deployment settings file name
      type: string
      default: deployment-settings.json

In my pipeline, it throws an error (unexpected property) where I assign the parameter values:

- template: deployment-template.yml
    parameters:
    environment_name: TEST
    variable_group: Test_Deployment_Variables       
    solution_name: $(solutionName)
    deployment_settings_file_name: deployment-settings.json

Can parameters not be assigned at the root of the pipeline and within the template?

For context, here are parts of the YAML files: Pipeline

trigger: none
name: $(Rev:r) # Set the build number 

parameters:
- name: CommitMessage
  displayName: Enter commit message
  type: string

# Global variables
variables: 
  solutionName: ALM_Solution
  userEmail: [email protected]

stages:
  - stage: Build
    jobs:
    - job: Build
      pool:
        vmImage: windows-latest
      steps:
      - task: Task1
      - task: Task2
      ...
      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
          ArtifactName: 'drop'
          publishLocation: 'Container'

  - stage: deploy_to_test
    displayName: Deploy to TEST
    jobs:
    - template: deployment-template.yml
      parameters:
        environment_name: TEST
        variable_group: Test_Deployment_Variables       
        solution_name: $(solutionName)
        deployment_settings_file_name: deployment-settings.json

  - stage: deploy_to_prod
    displayName: Deploy to PROD
    jobs:
    - template: deployment-template.yml
      parameters:
        environment_name: PROD
        variable_group: Prod_Deployment_Variables       
        solution_name: $(solutionName)
        deployment_settings_file_name: deployment-settings.json

Deployment Template

arameters:
  - name: environment_name
      displayName: Environment name/type
      type: string
  - name: variable_group
      displayName: Variable Group
      type: string
  - name: solution_name
      displayName: Solution Name
      type: string
  - name: deployment_settings_file_name
      displayName: Deployment settings file name
      type: string
      default: deployment-settings.json

job:
    - deployment: deployment
      environment: '${{parameters.environment_name}}'
      continueOnError: false
      timeoutInMinutes: 20 # 

      pool:
        vmImage: 'windows-latest'
      
      variables:
        # Variable group
        - group: '${{parameters.variable_group}}'

      strategy:
        runOnce:
          deploy:
            steps:
            - download: buildPipeline
              artifact: drop            
            - task: PowerPlatformToolInstaller@2
            - task: task1
            - task: task2

I have tried confirming YAML syntax via online checkers and it appears to be valid.

Upvotes: 0

Views: 254

Answers (1)

Ziyang Liu-MSFT
Ziyang Liu-MSFT

Reputation: 5211

Made some changes to your deployment-template.yml and now the pipeline works fine on my side.

  1. Change arameters: to parameters:
  2. You should define parameters as shown below:
parameters:
- name: environment_name
  displayName: Environment name/type
  type: string
- name: variable_group
  displayName: Variable Group
  type: string
- name: solution_name
  displayName: Solution Name
  type: string
- name: deployment_settings_file_name
  displayName: Deployment settings file name
  type: string
  default: deployment-settings.json
  1. Change job: to jobs:

The complete deployment-template.yml file:

parameters:
- name: environment_name
  displayName: Environment name/type
  type: string
- name: variable_group
  displayName: Variable Group
  type: string
- name: solution_name
  displayName: Solution Name
  type: string
- name: deployment_settings_file_name
  displayName: Deployment settings file name
  type: string
  default: deployment-settings.json

jobs:
- deployment: deployment
  environment: '${{parameters.environment_name}}'
  continueOnError: false
  timeoutInMinutes: 20 # 

  pool:
    vmImage: 'windows-latest'
      
  variables:
    # Variable group
    - group: '${{parameters.variable_group}}'

  strategy:
    runOnce:
      deploy:
        steps:
        - script: echo 'The value of solution_name' ${{parameters.solution_name}}

Upvotes: 0

Related Questions