Hoy vamos a ver cómo crear nuestra imagen para levantar un agente de compilación para Azure DevOps o Team Foundation Server, de una manera rápida desde linea de comandos uando azure cli.
Lo primero que necesitamos es encontrar una imagen base de la que partir, en el Market de azure podemos encontrar imagenes con visual studio 2019 instalado:
az vm image list --location westeurope --offer visualstudio2019latest --publisher microsoftvisualstudio --all --output table
Una vez seleccionada la imagen que más se adata a nuestras necesidades, windows 10 o windows server, visual studio community o visual studio enterprise. Apuntamos su urn y ejecutamos la siguiente instrucción para crear una máquina virtual:
az vm create --resource-group rgbuildagent --name bldvs2019 --image MicrosoftVisualStudio:visualstudio2019latest:vs-2019-ent-latest-ws2019:2021.01.13 --os-disk-size-gb 250 --admin-username <userName> --admin-password <password> --location westeurope
Si el tamaño del disco es superior a 128 Gb tenemos que expandirlo usando el servicio de administración de discos o la herramienta DiskPart.
Algo que suelo hacer siempre es habilitar el soporte para rutas largas, ya que muchas veces la jerarquia de carpetas de los proyectos es muy profunda y supera los 256 caracteres.
Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value 1
El siguiente paso es entrar por escritorio remoto en la máquina que acabamos de crear e instalar el resto de componentes o software que necesitamos para compilar nuestra solución. En mi caso suelo instalar lo siguiente:
- NVM. https://github.com/coreybutler/nvm-windows
- Azure CLI. https://docs.microsoft.com/es-es/cli/azure/install-azure-cli-windows?tabs=azure-cli
- Extensión para compilar paquetes SSIS. https://marketplace.visualstudio.com/items?itemName=SSIS.SqlServerIntegrationServicesProjects
Una vez hemos terminado de instalar todo lo necesario reiniciamos la máquina y la generalizamos:
C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
El siguiente paso es realizar el deallocate de la máquina virtual
az vm deallocate --resource-group rgbuildagent --name bldvs2019
Esperamos que el proceso anterior termine (puede demorarse un poco) y marcamos la máquina virtual como generalizada:
az vm generalize --resource-group rgbuildagent --name bldvs2019
Ahora vamos a crear una imagen de la máquina virtual:
az image create --resource-group rgbuildagent --name bldvs2019_250gb --source bldvs2019 --location westeurope
Y por último levantamos un Scale Set desde la imagen:
az vmss create --resource-group rgbuildagent --name ssbuildagents --image bldvs2019_250gb --admin-username <userName> --admin-password <password> --instance-count 1 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
Ya podemos crear nuestro Agent Pool de tipo Virtual Machine Scale Set en Azure DevOps Services y seleccionar el Scale Set recien creado.
Podeis encontrar más documentación en el siguiente enlace: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/scale-set-agents?view=azure-devops