Cómo declarar y asignar un valor a una variable en un Build Pipeline en Azure DevOps
Introducción
Una de las cosas que a veces más cuesta a la hora de trabajar con Azure DevOps y YAML, es la declaración de una variable que utilizaremos en alguno de los pasos de ejecución del pipeline de Build.
Que yo sepa, existen varias técnicas para poder lograr esto, pero a mí al menos sólo me ha funcionado una, la que comparto en esta entrada.
Sé que hay mucha gente en Internet quejándose para que Microsoft mejore todo lo relativo a la declaración y uso de variables en todo el Pipeline de Azure DevOps, y sé que Microsoft tiene abiertas varias iniciativas internas para mejorar esto, pero de momento y que yo sepa, ese trabajo no ha terminado.
Branches
En esta pequeña demostración, parto de tres branches que he creado para la ocasión.
Como preferencia personal, he cambiado la branch por defecto (master) a (development).
También he creado otras dos ramas más, (staging) y (production).
YAML
El siguiente paso es crear mi YAML.
Deberemos declarar la variable que querremos usar en todo el YAML de ejecución.
Por ejemplo, mi variable myVariable a la que la he asignado el valor none por defecto al inicializarla dentro del YAML:
variables: myVariable: none
A continuación evaluaremos en qué rama nos encontramos para asignar a la variable que hemos declarado un valor (dev, sta o pro) dependiendo de la rama en la que estemos.
La manera que a mí al menos me ha funcionado en YAML para lograr mi propósito ha sido trabajando con PowerShell.
La parte principal de asignación de un valor a una variable la lograremos de esta forma:
Write-Host "##vso[task.setvariable variable=myVariable;]dev"
Finalmente posteriormente mostraremos el valor de myVariable.
A continuación expongo mi YAML completo el cuál quedará de la siguiente forma:
trigger: branches: include: - development - staging - production pool: vmImage: 'VS2017-Win2016' variables: myVariable: none steps: - task: PowerShell@2 displayName: 'Setting the variable value depending of the current branch' inputs: targetType: 'inline' script: | $branch = $Env:Build_SourceBranchName if ($branch -eq "development") { Write-Host "##vso[task.setvariable variable=myVariable;]dev" } elseif ($branch -eq "staging") { Write-Host "##vso[task.setvariable variable=myVariable;]sta" } elseif ($branch -eq "production") { Write-Host "##vso[task.setvariable variable=myVariable;]pro" } - script: echo $(myVariable) displayName: 'Show the value of myVariable'
Ejecutando mis Build Pipelines
Pondré mi YAML en todas las ramas y las ejecutaré una a una para ver el resultado.
No deberíamos tener ningún problema y obtener un resultado parecido al siguiente:
Comprobaremos que todas las Build Pipelines se han ejecutado correctamente:
Comprobando que la asignación de nuestra variable ha sido correcto
El último paso es comprobar que la asignación de nuestra variable se ha realizado de forma correcta.
Para ello, abriremos uno de los resultados de Build Pipeline que veíamos en la imagen anterior y comprobaremos dentro del paso Show the value of myVariable que el valor para la rama ejecutada en Build Pipeline se ha asignado tal y como esperamos:
Espero que te sea de ayuda.
Happy Coding!