- Azure
- Azure DevOps
In the previous article we have shown you the basics of using variables inside your Azure DevOps pipelines. Today we will go further and take a look at different ways to use variables and parameters inside reusable templates.
For the purpose of this tutorial let us take this extract of template:
variables:
- name: minimumVersionNumber
value: 1000
steps:
# ...steps before
- task: Bash@3
displayName: 'Calculate a build number'
inputs:
targetType: 'inline'
script: |
echo Computing with $(minimumVersionNumber) or ${{ variables.minimumVersionNumber }}
# ...steps after
In this example, we have a basic shell task Bash@3
that calculates the build version number for our application. Because we define the minimumVersionNumber
inside the default Azure DevOps variables
object, there are two options to access it:
$(minimumVersionNumber)
: This notation is accessible anywhere in your template${{ variables.minimumVersionNumber }}
: This is only accessible at the same level of the variables
definitionWith that done we will create a new template inside a file called: compute-build-number.yml
to be able to reuse this task in different projects:
# compute-build-number.yml
# Define parameter first way:
parameters:
minVersion: 0
# Or second way:
parameters:
- name: minVersion
type: number
value: 0
steps:
- task: Bash@3
displayName: 'Calculate a build number'
inputs:
targetType: 'inline'
script: |
echo Computing with ${{ parameters.minVersion }}
As you can see the minVersion
is defined inside the object parameters
, to access it you need to use ${{ parameters.minVersion }}
. You can call the object parameters
the way you need, the goal is to define all parameters needed for this template to work. This will also be useful when someone else want to know the necessary parameters to provide to be able to reuse this template.
Now, let us update our pipeline to use this template:
variables:
- name: minimumVersionNumber
value: 1000
steps:
# ...steps before
- template: compute-build-number.yml
parameters:
minVersion: $(minimumVersionNumber)
# OR:
- template: compute-build-number.yml
parameters:
minVersion: ${{ variables.minimumVersionNumber }}
# ...steps after
Why do not we use the $(my_variable)
notation everywhere inside our pipeline and avoid using parameters for our templates?
It is not recommended because if you do that you will:
As you can see in these tutorials, you have multiple ways to use parameters and variables inside Azure DevOps, be sure to check the context to apply the right one, you do not access your variables and parameters the same way.