Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Azure Devops: ¿Cómo saber el nombre de todas las variables y sus valores?

Si son como yo seguramente se confundirán todo el tiempo qué variable predefinda tiene qué valor, además de tener claro el valor en sí.

Por ejemplo al crear un pipeline de build no recordar si Build.ArtificatsStagingDirectory es lo mismo que Agent.BuildDirectory, etc. más aún, si además las variables que nosotros definimos tienen el valor esperado.

En este post vamos a ver un pequeño truco para averiguarlo en 2 minutos.

PowerShell al rescate

Además con este método vamos a saber cómo acceder a estas variables desde PowerShell, es decir, si hacemos un script (o inline) para que se ejecute como un step de un build o release podemos acceder a todas las variables.

Las variables de Azure Devops son variables de entorno en la máquina que se ejecuta el agente.

Al fin de cuentas cada variable de sistema de Azure Devops como las que definimos nosotros terminan llegando al agente como variables de entorno, y podemos acceder a ellas desde PowerShell o desde cualquier aplicación, solo tenemos que tener en cuenta algunas reglas.

Conversiones de nombre

  • Primero, los nombres de todas las variables se convierten a mayúsculas.
  • Segundo, los . que separan (por ejemplo) Agent.BuildDirectory, se reemplazan por _

Y listo, entonces System.ArtifiactsDirectory podemos encontrarlo como variable de entorno con el nombre SYSTEM_ARTIFACTSDIRECTORY

Y cómo hacemos para averiguar todos los nombres y valores desde Azure Devops?

Bien, el truco es simple, solo tenemos que crear un pipeline de build (o release, depende de qué variables queremos conocer) y agregamos una tarea de Powershell, elegimos que el Type del script sea “inline” y ponemos lo siguiente

ls env:

image

Solo eso, y la ejecutamos (si es un build guardar y encolar, si es un release, guardar, generar release, encolar) y cuando finaliza miramos el log, y veremos todas las variables de entorno de la máquina del agente en cuestión y entre ellas las propias de Azure Devops.

image

Ah, y para leer variables de entorno (como por ejemplo las de Azure Devops sean predefinidas o las creadas por nosotros) es tan simple como:

$variableValue = [System.Environment]::GetEnvironmentVariable("SYSTEM_DEFAULTWORKINGDIRECTORY")

Y obtenemos el valor de System.DefaultWorkingDirectory en este caso

Enjoy.

Loading