Loupe

Azure Pipelines : Comment ajouter un agent de build avec Azure Container Instances

Marre d’attendre qu’un agent de build soit disponible ?

Vous possédez quelques Parallel jobs de disponibles et cherchez une bonne manière de pouvoir les exploiter ponctuellement ?

Voyons comment faire tourner un agent de build “à la demande” depuis Azure Container Instances pour obtenir un agent de build en quelques minutes pour votre projet Azure DevOps.

Utilisation des images Microsoft déjà “prêtes à l'emploi”

Le moyen le plus simple pour avoir un agent de build en 1 ligne de commande est de se baser sur l’une des images mises à disposition par Microsoft.

Mais trêve de bavardages, ci-dessous la ligne de commande qui permet d'exécuter un agent de build sur Azure Container Instances :

az container create -g MY_RESOURCE_GROUP -n MY_CONTAINER_NAME --image mcr.microsoft.com/azure-pipelines/vsts-agent --cpu 1 --memory 7 --environment-variables VSTS_ACCOUNT=MY_ACCOUNT_NAME VSTS_TOKEN=MY_VSTS_TOKEN VSTS_AGENT=MY_AGENT_NAME VSTS_POOL=Default

Où :

  • --image correspond à l’une des images listées sur la page Azure Pipelines Agent

  • VSTS_ACCOUNT correspond au nom de votre organisation Azure DevOps (sans préfixe https://dev.azure.com/ et sans suffixe visualstudio.com)

  • VSTS_TOKEN correspond au PAT (Personal Access Token) utilisé pour accéder à votre organisation Azure DevOps. (Pour en générer un nouveau se référer à Create personal access tokens to authenticate access)

  • VSTS_AGENT correspond au nom de l’agent de build affiché dans Azure DevOps

  • VSTS_POOL correspond à l’agent pool où vous souhaitez placer votre agent de build. Par défaut l’agent pool utilisé est le Default agent pool.

Pour les autres paramètres propres à az container create, vous pouvez vous référer à docs.microsoft.com

Example d’utilisation

az container create -g aci-vfa-rg -n my-aci-agent --image mcr.microsoft.com/azure-pipelines/vsts-agent --cpu 1 --memory 7 --environment-variables VSTS_ACCOUNT=vivien VSTS_TOKEN=5a7jwwhoj64nlcyxcxahnj2v74zifcijg6xzcpkun6kdutjlk2sq VSTS_AGENT=my-aci-agent VSTS_POOL=Default

01-azure-container-instance-running-azure-pipelines-build-agent.png

Et voilà ! Votre agent est prêt à exécuter vos Azure Pipelines !

Et côté pricing ?

Maintenant que vous avez votre agent, voyons voir à combien revient son temps d'exécution.

Faisons quelques maths :

Nous avons 7 GO de mémoire, pendant 20 minutes. Si l'on se réfère à la page de pricing d'ACI, le prix d'1 seconde d'exécution pour 1 GO de mémoire est de 0.0000012 €, ce qui nous donne :

7 * 20 * 60 * 0.0000012 = 0.01008 €

Faisons la même chose pour l'utilisation CPU. Pour 1 coeur pendant 20 minutes, au prix de 0.0000110 € par seconde d'exécution, on obtient :

20 * 60 * 0.0000110 = 0.0132 €

Soit au total 0.02328 € (soit 2 à 3 centimes d'euros) pour 20 minutes d'exécution !
En prenant quelques raccourcis, on peut donc évaluer à environ 2 à 3 centimes d'euros le coût d'exécution d'une build sur ACI :)

Pour aller plus loin

Pour gérer votre conteneur, il suffit d’utiliser les commandes az container stop pour arrêter le conteneur (et arrêter de payer pour son exécution), ainsi que az container start pour le rendre de nouveau disponible !

Cependant, le principal désavantage de cette solution réside dans le fait qu’il faut environ 10 minutes pour que le pull de l’image soit effectué (sachant qu’elle fait un peu plus de 10 GO). Suivant votre contexte, ces 10 minutes pourraient s’avérer être un réel blocage. Une solution simple serait de composer votre propre image “custom”, en embarquant uniquement les dépendances nécessaires à votre projet, ce qui vous permettrait d’avoir un agent de build opérationnel en quelques secondes ! Mais ce second scénario sera l’objet d’un prochain article.

Que le code soit avec vous !

Bonus - Stocker vos logs dans Azure Log Analytics (Azure Monitor)

Les logs de vos conteneurs sont accessibles directement depuis le portail Azure :

02-azure-container-instance-logs-from-azure-portal.png

Si vous souhaitez les stocker, vous pouvez les envoyer à un workspace Azure Log Analytics en spécifiant quelques paramètres supplémentaires à la ligne de commande az container create.

En prérequis, il est nécessaire d’avoir un workspace Azure Log Analytics déjà créé (Voir mon article sur l’utilisation d’Azure Log Analytics avec aspnetcore et serilog), puis de récupérer votre WORKSPACE ID et votre PRIMARY KEY.

Il faut ensuite ajouter à la commande az container create les paramètres suivants :

  • --log-analytics-workspace correspondant au WORKSPACE ID

  • --log-analytics-workspace-key correspondant à votre PRIMARY KEY

Profitez de l’exploration de vos logs depuis Azure Log Analytics !

03-azure-container-instances-logs-from-azure-log-analytics.PNG

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus