Administración de variables en grupos de variables con la CLI de Azure DevOps
Azure DevOps Services
La administración de variables en Azure Pipelines es fundamental para mantener la flexibilidad y la seguridad en los flujos de trabajo de CI/CD. En esta guía se muestra cómo usar la CLI de Azure DevOps para crear y administrar variables secretas y no secretas dentro de un grupo de variables de Azure Pipelines. Mediante el uso de grupos de variables, puede centralizar la administración de variables y asegurarse de que la información confidencial se controla de forma segura.
Con el ejemplo de esta guía, aprenderá a:
- Definir una canalización de Azure Pipelines mediante un archivo YAML almacenado en GitHub.
- Crear un grupo de variables que contenga variables secretas y no secretas.
- Ejecutar la canalización mediante la CLI de Azure DevOps y supervisar el procesamiento y la salida de la ejecución.
Nota:
En este ejemplo se muestra la funcionalidad de la CLI de Azure DevOps con grupos de variables. Para aumentar la seguridad, defina variables en grupos de variables en la interfaz de usuario de Canalizaciones o vincule un grupo de variables a secretos en Azure Key Vault.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- un repositorio de GitHub con Azure Pipelines instalado
- Un token de acceso personal (PAT) de GitHub para el acceso
- Una organización de Azure DevOps con un token de acceso personal (PAT) para la autenticación
- Permisos de administrador de la colección de proyectos en la organización de Azure DevOps
Guardar el archivo YAML de canalización
Guarde la siguiente definición de canalización de YAML como un archivo denominado azure-pipelines.yml en el directorio raíz y la rama main
del repositorio de GitHub.
parameters:
- name: image
displayName: 'Pool image'
default: ubuntu-latest
values:
- windows-latest
- windows-latest
- ubuntu-latest
- ubuntu-latest
- macOS-latest
- macOS-latest
- name: test
displayName: Run Tests?
type: boolean
default: false
variables:
- group: "Contoso Variable Group"
- name: va
value: $[variables.a]
- name: vb
value: $[variables.b]
- name: vcontososecret
value: $[variables.contososecret]
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- script: |
echo "Hello, world!"
echo "Pool image: ${{ parameters.image }}"
echo "Run tests? ${{ parameters.test }}"
displayName: 'Show runtime parameter values'
- script: |
echo "a=$(va)"
echo "b=$(vb)"
echo "contososecret=$(vcontososecret)"
echo
echo "Count up to the value of the variable group's nonsecret variable *a*:"
for number in {1..$(va)}
do
echo "$number"
done
echo "Count up to the value of the variable group's nonsecret variable *b*:"
for number in {1..$(vb)}
do
echo "$number"
done
echo "Count up to the value of the variable group's secret variable *contososecret*:"
for number in {1..$(vcontososecret)}
do
echo "$number"
done
displayName: 'Test variable group variables (secret and nonsecret)'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
El script de ejemplo
Este código de ejemplo realiza las tareas siguientes:
- Creación de los recursos de DevOps
- Ejecución de la canalización
- Modificación de los valores de variable tres veces
- Nueva ejecución de la canalización cada vez que se cambian los valores de variable
El script crea los siguientes recursos en Azure DevOps:
- Un proyecto en su organización de DevOps
- Una conexión del servicio de GitHub
- Una canalización
- Un grupo de variables con dos variables no secretas y una variable secreta
Antes de ejecutar el script, reemplace los siguientes marcadores de posición de la siguiente manera:
<devops-organization>
Nombre de su organización de Azure DevOps<github-organization>
Nombre de usuario o de su organización de GitHub<github-repository>
Nombre de su repositorio de GitHub<pipelinename>
Nombre de la canalización que tiene entre 3 y 19 caracteres y solo contiene números y letras minúsculas. El script agrega un identificador único de cinco dígitos.
Guarde el PAT de GitHub en el entorno local.
AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>
Después de almacenar el archivo YAML en GitHub, ejecute el siguiente script de la CLI de Azure DevOps en un shell de Bash en Cloud Shell o localmente.
#!/bin/bash
# Provide placeholder variables.
devopsOrg="https://dev.azure.com/<devops-organization>"
githubOrg="<github-organization>"
githubRepo="<github-repository>"
pipelineName="<pipelinename>"
repoName="$githubOrg/$githubRepo"
repoType="github"
branch="main"
# Declare other variables.
uniqueId=$RANDOM
devopsProject="Contoso DevOps Project $uniqueId"
serviceConnectionName="Contoso Service Connection $uniqueId"
# Sign in to Azure CLI and follow the sign-in instructions, if necessary.
echo "Sign in."
az login
# Sign in to Azure DevOps with your Azure DevOps PAT, if necessary.
echo "Sign in to Azure DevOps."
az devops login
# Create the Azure DevOps project and set defaults.
projectId=$(az devops project create \
--name "$devopsProject" --organization "$devopsOrg" --visibility private --query id)
projectId=${projectId:1:-1} # Just set to GUID; drop enclosing quotes.
az devops configure --defaults organization="$devopsOrg" project="$devopsProject"
pipelineRunUrlPrefix="$devopsOrg/$projectId/_build/results?buildId="
# Create GitHub service connection.
githubServiceEndpointId=$(az devops service-endpoint github create \
--name "$serviceConnectionName" --github-url "https://www.github.com/$repoName" --query id)
githubServiceEndpointId=${githubServiceEndpointId:1:-1} # Just set to GUID; drop enclosing quotes.
# Create the pipeline.
pipelineId=$(az pipelines create \
--name "$pipelineName" \
--skip-first-run \
--repository $repoName \
--repository-type $repoType \
--branch $branch \
--service-connection $githubServiceEndpointId \
--yml-path azure-pipelines.yml \
--query id)
# Create a variable group with 2 non-secret variables and 1 secret variable.
# (contososecret < a < b). Then run the pipeline.
variableGroupId=$(az pipelines variable-group create \
--name "$variableGroupName" --authorize true --variables a=12 b=29 --query id)
az pipelines variable-group variable create \
--group-id $variableGroupId --name contososecret --secret true --value 17
pipelineRunId1=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 1st run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId1}"
read -p "Press Enter to change the value of one of the variable group's nonsecret variables, then run again:"
# Change the value of one of the variable group's nonsecret variables.
az pipelines variable-group variable update \
--group-id $variableGroupId --name a --value 22
pipelineRunId2=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 2nd run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId2}"
read -p "Press Enter to change the value of the variable group's secret variable, then run once more:"
# Change the value of the variable group's secret variable.
az pipelines variable-group variable update \
--group-id $variableGroupId --name contososecret --value 35
pipelineRunId3=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 3rd run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId3}"
read -p "Press Enter to continue:"
Limpieza de recursos
Para evitar incurrir en cargos para el proyecto de Azure, puede eliminar el proyecto de ejemplo, que también elimina su recurso.
Copie el id
del proyecto de ejemplo de la salida del comando siguiente:
az devops project list --org <your-organization>
Elimine el proyecto ejecutando el siguiente comando:
az devops project delete --id <project-id> --org <your-organization> --yes
Limpie el entorno local mediante la ejecución de los siguientes comandos:
export AZURE_DEVOPS_EXT_GITHUB_PAT=""
az devops configure --defaults organization="" project=""
Referencias de la CLI de Azure
En el ejemplo de este artículo se usan los siguientes comandos de la CLI de Azure:
- az devops configure
- az devops project create
- az devops project delete
- az devops project delete
- az devops service-endpoint github create
- inicio de sesión de az
- az pipelines create
- az pipelines delete
- az pipelines run
- az pipelines variable-group create
- az pipelines variable-group delete
- az pipelines variable-group variable create
- az pipelines variable-group variable update