Azure DevOps Variable Groups are a powerful tool for managing and sharing variables across multiple environments and projects. They allow you to define and store variables in a centralized location.
You can create a variable group in Azure DevOps by going to the Variable Groups section under Project Settings. From there, you can create a new variable group and add variables to it.
A variable group can contain up to 1000 variables, which can be used in your pipelines, release definitions, and other Azure DevOps configurations. This makes it easy to manage and reuse variables across your organization.
Variable Group Basics
Variable groups are a set of variables that you can use across multiple pipelines. They allow you to manage and organize variables that are common to various stages in one place.
You can define variable groups at the root level of a pipeline using the alternate syntax for variable templates and variable groups.
Variable groups can be used to manage and organize variables that are common to various stages in one place, making it easier to maintain and update your pipeline settings.
Specify
Specify variables by using the variables keyword, which can be followed by a list of key-value pairs. This syntax is useful for defining regular variables.
You can also use templates for variables or variable groups, which allow you to reuse variables across multiple pipelines. This is especially helpful when you have common variables used across various stages.
Variable groups are a set of variables that can be used across multiple pipelines, making it easier to manage and organize common variables in one place.
The variables keyword can take a list of variable specifiers, which include name for a regular variable, group for a variable group, and template to include a variable template. This alternate syntax is useful for defining variable templates and groups at the root level of a pipeline.
To set a variable for a build pipeline, you can follow the steps outlined in the documentation, which will guide you through the process.
Parameters
In Azure DevOps, variables are used to store and manage values that can be used across a pipeline. The name of the variable is required and must be specified.
You can configure the default organization using az devops configure -d organization=ORG_URL, and the organization URL is required if it's not configured as default or picked up using git config. For example, you can specify the organization URL as https://dev.azure.com/MyOrganizationName/.
The pipeline ID or pipeline name is required, but not both. If you specify the pipeline ID, the pipeline name is ignored. You can configure the default project using az devops configure -d project=NAME_OR_ID, and the project name or ID is required if it's not configured as default or picked up using git config.
Here are the parameters you can use to create a variable in Azure DevOps:
Runtime Expression Syntax
Runtime Expression Syntax is used for variables that are expanded at runtime. It's processed at runtime, unlike template expression syntax which is processed at compile time.
Runtime expressions can appear as either keys (left side) or values (right side) in a pipeline definition, but only as values. They can be used in job conditions to support conditional execution of jobs or whole stages.
Runtime expression variables silently coalesce to empty strings when a replacement value isn't found. This means that if a variable is not found, the expression will not throw an error.
Here are some valid examples of runtime expression syntax:
You can use runtime expressions to set variables that are expanded at runtime. For example, you can use the counter function to set a variable that starts at 100, gets incremented by 1 for every run, and gets reset to 100 every day.
Runtime expression syntax is useful when working with conditions and expressions, but be aware that it will print the variable name if the variable is not found.
Setting Variables
Setting variables in Azure DevOps is a crucial part of managing your pipeline's behavior. You can set variables in the pipeline settings UI, and reference them in your YAML file.
Variables can be used to track changes in your version control system. To use a variable in a YAML statement, wrap it in $(). For example, if you set a variable named configuration, you can reference it later in your YAML as $configuration.
You can also define variables in a script using the task.setvariablelogging command. This updates the environment variables for subsequent jobs. Subsequent jobs have access to the new variable with macro syntax and in tasks as environment variables.
When issecret is true, the value of the variable will be saved as secret and masked from the log. For more information on secret variables, see logging commands.
You can set a variable by using an expression, such as a counter that starts at 100 and gets incremented by 1 for every run. Here's an example of setting a variable to act as a counter: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)].
To add a variable to a variable group, use the az pipelines variable-group variable create command. This command creates a new variable named requires-login with a default value of true in the variable group with ID 4.
Here's a summary of how to set variables in Azure DevOps:
- Set variables in the pipeline settings UI and reference them in your YAML file.
- Use the task.setvariablelogging command to define variables in a script.
- Use expressions, such as counters, to set variables dynamically.
- Use the az pipelines variable-group variable create command to add variables to a variable group.
Variable Scopes and Management
Variable scopes in Azure DevOps allow you to define variables at different levels, including the root level, stage level, and job level. Variables defined at the top of a YAML file are available to all jobs and stages in the pipeline and are considered global variables.
You can set variables at the root level to make them available to all jobs in the pipeline. Variables at the stage level override variables at the root level, and variables at the job level override variables at both the root and stage levels.
Here's a summary of variable scopes:
By understanding variable scopes, you can manage your variables effectively and ensure that sensitive information is securely handled.
Defined Multi-Line
Azure DevOps supports multi-line variables, but there are some limitations to be aware of. Downstream components like pipeline tasks might not handle the variable values correctly.
To use multi-line variables, you need to format them correctly before passing them to downstream components. Avoid special characters, don't use restricted names, and make sure you use a line ending format that works for the operating system of your agent.
Multi-line variables behave differently depending on the operating system, so it's essential to format them correctly for the target OS. Azure DevOps won't alter user-defined variable values, even if you provide unsupported formatting.
In the most common case, you set the variables and use them within the YAML file to track changes to the variable in your version control system. You can also define variables in the pipeline settings UI and reference them in your YAML.
To use a variable in a YAML statement, wrap it in $(). Variables can't be used to define a repository in a YAML statement.
System
System variables are a type of predefined value in Azure Pipelines that can be used to identify different pipeline runs. They get set with their current value when you run the pipeline.
Some system variables are set automatically, while others can be changed by a pipeline author or end user before the pipeline runs. These variables are read-only, meaning their values cannot be modified once set.
System variables can be used in scripts or tasks when a unique value is needed, such as the Build.BuildId variable which gives the ID of each build. This can be especially useful when working with batch, PowerShell, or shell scripts.
The following types of scripts can use system variables: BatchPowerShellShell
Scopes
Variable scopes are a crucial aspect of Azure Pipelines, and understanding how they work can help you manage your variables more effectively. Variables can be set at various scopes, including the root level, stage level, and job level.
At the root level, variables are available to all jobs in the pipeline, making them global variables. However, global variables defined in a YAML aren't visible in the pipeline settings UI.
Variables at the job level override variables at the root and stage level, making them the highest priority. Variables at the stage level override variables at the root level, giving them a higher priority than global variables.
Here's a summary of variable scopes and their precedence:
- Root level: Global variables available to all jobs in the pipeline
- Stage level: Variables available only to a specific stage
- Job level: Variables available only to a specific job
- Precedence: Job level > Stage level > Root level
Understanding variable scopes can help you manage your variables more effectively, especially when working with complex pipelines. By setting variables at the right scope, you can ensure that they are available only to the jobs and stages that need them, reducing the risk of variable conflicts and making your pipeline easier to maintain.
Frequently Asked Questions
What is the difference between key vault and variable group in Azure?
Key Vault in Azure stores and manages cryptographic keys and certificates, while a variable group in Azure Pipelines stores and manages secret values, with key vault secrets being the only supported integration. This distinction affects how you manage sensitive data in your Azure Pipelines.
How do you use variable groups in YAML?
Variable groups in YAML allow you to define a set of reusable variables that can be used across multiple pipelines, making it easier to manage and organize common variables in one place
Sources
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables
- https://markallison.co.uk/blog/azure-pipelines-variables/
- https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups
- https://github.com/MicrosoftDocs/azure-devops-docs/blob/main/docs/pipelines/scripts/cli/pipeline-variable-group-secret-nonsecret-variables.md
- http://www.kevinlabranche.com/blog/conventions-for-using-variables-groups-in-azure-devops
Featured Images: pexels.com