Crear variables de salida de una tarea en Azure DevOps

Seguro que en más de una ocasión has necesitado devolver algunos valores entre tarea y tarea de Azure DevOps. En mi caso, he estado creando algunos recursos de Microsoft Azure de manera dinámica, que luego he tenido que usar en los siguientes pasos. Es por ello que he necesitado recuperar el endpoint o la clave de acceso, para poder utilizarlo después. En este artículo te muestro cómo.

Sintaxis para la exportación

Para poder exportar cualquier variable a Azure DevOps debemos seguir esta sintaxis en nuestros scripts:

##vso[task.setvariable variable=VARIABLE_NAME]VALUE

Con esta cadena, publicamos fuera de nuestra tarea la variable que queramos, pudiendo reutilizarla en pasos posteriores.

En este ejemplo puedes ver cómo exportar valores en un script en bash (Linux):

#!/bin/bash

#Variables
RESOURCE_GROUP=CosmosDB$RANDOM
LOCATION=northeurope
ACCOUNT_NAME=cosmos$RANDOM

#Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION --tags 

#Create a CosmosDB account
az cosmosdb create --resource-group $RESOURCE_GROUP --name $ACCOUNT_NAME --kind GlobalDocumentDB

#Get the primary key
key=$(az cosmosdb list-keys --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP --query "primaryMasterKey" --output tsv)

#Get the endpoint
endpoint=$(az cosmosdb show --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP --query "documentEndpoint" --output tsv)

echo "##vso[task.setvariable variable=CosmosDBRg]$RESOURCE_GROUP"
echo "##vso[task.setvariable variable=CosmosDBAccountName]$ACCOUNT_NAME"
echo "##vso[task.setvariable variable=CosmosDBEndpoint]$endpoint"
echo "##vso[task.setvariable variable=CosmosDBAuthKey;issecret=true]$key"

Y en este otro en un script batch (Windows):

#Variables
SET RESOURCE_GROUP=CosmosDB%RANDOM%
SET LOCATION=northeurope
SET ACCOUNT_NAME=cosmos%RANDOM%

#Create a resource group
CALL az group create --name %RESOURCE_GROUP% --location %LOCATION%

#Create a CosmosDB account
CALL az cosmosdb create --resource-group %RESOURCE_GROUP% --name %ACCOUNT_NAME% --kind GlobalDocumentDB

#Get the primary key
CALL az cosmosdb list-keys --name %ACCOUNT_NAME% --resource-group %RESOURCE_GROUP% --query "primaryMasterKey" --output tsv>primaryKey
set /p key= < primaryKey

#Get the endpoint
CALL az cosmosdb show --name %ACCOUNT_NAME% --resource-group %RESOURCE_GROUP% --query "documentEndpoint" --output tsv>documentEndpoint
set /p endpoint= < documentEndpoint

echo ##vso[task.setvariable variable=CosmosDBRg]%RESOURCE_GROUP%
echo ##vso[task.setvariable variable=CosmosDBAccountName]%ACCOUNT_NAME%
echo ##vso[task.setvariable variable=CosmosDBEndpoint]%endpoint%
echo ##vso[task.setvariable variable=CosmosDBAuthKey;issecret=true]%key%

Como ves, en ambos, creamos las variables CosmosDBRg, CosmosDBAccountName, CosmosDBEndpoint y CosmosDBAuthKey. Estas pueden ser recuperadas directamente en una tarea del tipo “Command Linede Azure DevOps:

Utilizando las variables creadas en la tarea anterior

O también es posible utilizarlas dentro de otro script. En el caso de Windows funciona de esta manera:

ECHO %CosmosDBAccountName%
ECHO %CosmosDBRg%
CALL az group delete --name %CosmosDBRg% --yes --no-wait

En el caso de Linux necesitas pasar como parámetro la variable a través del campo Arguments:

y después utilizarla de la siguiente manera:

#!/bin/bash
az group delete --name $1 --yes --no-wait

El código de ejemplo que he utilizado es este en GitHub.

¡Saludos!