Tapan
Tapan

Reputation: 53

Issues while passing variable groups parameter to template from azure pipeline.yml

I have declared a variable group Agile-Connections as below and the group do not have any restriction for any Pipeline:

enter image description here

I am using another template called vars.yml to store some other variables:

variables:
- group: Agile-Connections
- name: extensions_dir
  value: /apps/agile/product/agile936/integration/sdk/extensions
- name: properties_dir
  value: /apps/agile/product/Properties
- name: build_name
  value: RestrictPreliminaryBOMPX.jar
- name: resource_name
  value: RestrictPreliminaryBOMPX.properties

My Azure Pipeline looks like below, which is calling a deploy.yml template, and I am passing two parameters (connection, environment) from azure pipeline.yml to deploy.yml.

Below is my azure-pipeline.yml:

trigger:
- None

pool:
  name: AgentBuildAgile

stages:
- template: templates/build.yml
- stage: DEV_Deployment
  variables: 
  - template: templates/vars.yml
  jobs:
  - job:
    steps: 
      - script:
          echo $(Dev-mnode1)
  - template: templates/deploy.yml
    parameters:
      connection: $(Dev-mnode1)
      environment: 'DEV'

Below is my deploy.yml:

parameters:
- name: connection
- name: environment

jobs:
- deployment:
  variables:
    - template: vars.yml
  environment: ${{ parameters.environment  }}
  displayName: Deploy to ${{ parameters.environment  }}
  strategy:
    runOnce:
      deploy:
        steps:
          - script:
              echo Initiating Deployment ${{ parameters.connection  }}

- template: copy-artifact.yml
  parameters:
    connection: ${{ parameters.connection  }}
# - template: copy-resources.yml
#   parameters:
#     connection: ${{ parameters.connection  }}

From my deploy.yml I am passing a parameter connection further to another template called copy-artifact.yml, which is below:

parameters:
- name: connection

jobs:
- job:
  variables:
    - template: vars.yml
  displayName: 'Copy jar'
  steps:
    # - script:
    #     echo ${{ parameters.connection  }}
  - task: SSH@0
    displayName: 'Task - Backup Existing jar file'
    inputs:
      sshEndpoint:  ${{ parameters.connection  }}
      runOptions: inline
      inline: 
        if [[ -f ${{ variables.extensions_dir  }}/${{ variables.build_name  }} ]]; then mv ${{ variables.extensions_dir  }}/${{ variables.build_name  }} ${{ variables.extensions_dir  }}/${{ variables.build_name  }}_"`date +"%d%m%Y%H%M%S"`"; echo "Successfully Backed up the existing jar"; fi

Now when I run my pipeline I am getting error message :

The pipeline is not valid. Job Job3: Step SSH input sshEndpoint references service connection $(Dev-mnode1) which could not be found. The service connection does not exist or has not been authorized for use. For authorization details, refer to https://aka.ms/yamlauthz.

When I print the value of $(Dev-mnode1) using the commented out lines in copy-artifacts.yml file, it prints fine (Dev11 Connection) but when I try to use that as service connection for my ssh task, it gives me the above error.

Also, there is a service connection Dev11 Connection in my project and all the pipelines are allowed to use that service connection.

Upvotes: 2

Views: 1763

Answers (1)

Kevin Lu-MSFT
Kevin Lu-MSFT

Reputation: 35129

The pipeline is not valid. Job Job3: Step SSH input sshEndpoint references service connection $(Dev-mnode1) which could not be found. The service connection does not exist or has not been authorized for use.

From the error message, the parameter does not get the variable value when expanding the template.

Tested the same sample and can reproduce the issue.

When you define the variable template at stage level, the variables in the template will expand at runtime and the paramter:connection will be expanded at compile time. So the correct value cannot be passed to the parameter.

To solve this issue, you can define the variable template at root level.

Refer to the sample:

trigger:
- None

pool:
  name: AgentBuildAgile

variables: 
  - template: templates/vars.yml

stages:
- template: templates/build.yml
- stage: DEV_Deployment

  jobs:
  - job:
    steps: 
      - script:
          echo $(Dev-mnode1)
  - template: templates/deploy.yml
    parameters:
      connection: $(Dev-mnode1)
      environment: 'DEV'

Upvotes: 3

Related Questions