Skip to main content

Mise en place de runners privés Azure DevOps à partir de l'image Microsoft des runners publics via Packer

· 6 min read
Laurenne Gault

Utilité

Les agents Azure DevOps sont utilisés pour les déploiements sur Azure Pipelines afin d'exécuter les différentes tâches nécessaires pour déployer votre application. Il existe des agents publics, disponibles par défaut et fournis par Microsoft.

Toutefois, il est possible d'instancier ses propres agents privés. Ceux-ci permettent de s'affranchir de la limite de 10 agents gratuits utilisables simultanéments et pouvant tourner pendant 6 heures maximum qu'impose Microsoft.

Ces pools d'agents sont constitués d'un ensemble de machines virtuelles compatibles avec de l'autoscaling (Virtual Machine Scale Set) qui sont configurées pour exécuter des tâches de compilation, de test et de déploiement de code dans le cadre d'un pipeline Azure DevOps.

tip

Le nombre d'agents privés que vous souhaitez avoir de disponibles dans Azure DevOps se contrôle à plusieurs endroits :

  • Au niveau de l'onglet Billing de l'organisation
  • Au niveau des pools d'agents privés lorsque vous configurez le nombre maximum d'agents pour un pool donné

Veillez à ce que ces valeurs soient concordantes afin de ne pas générer des dépenses inutiles en payant des emplacements d'agents inutilisés ou en instanciant trop de machines virtuelles.

Microsoft met à disposition les configurations des images de ses agents publics (code source des images disponible ici). Ces fichiers de configuration permettent de construire l'image depuis l'outil Packer.

Dans cet article, nous aborderons la mise en place des runners privés Windows et Linux avec Packer.

Le code Terraform ainsi que les scripts dont nous parlons dans cet article sont disponibles ici.

Introduction à Packer

Packer est un outil permettant de créer des images machines personnalisées. Celles-ci pourront ensuite être utilisées sur différentes machines, notamment des machines virtuelles dans Azure et des Virtual Machine Scale Sets que nous utiliserons dans la suite de l'article.

Packer peut être installé depuis le lien suivant : Lien de téléchargement Packer.

Il s'agit d'un exécutable dont le chemin devra être ajouté dans la variable d'environnement %PATH% pour exécuter des commandes Packer.

Création des runners privés

Récupération de l'image Microsoft

  1. Récupération du dépôt Git contenant les images Microsoft des agents

La récupération se fait depuis l'URL suivante : https://github.com/actions/runner-images.git.

  1. Modification du fichier de configuration Packer

Il peut être utile de modifier le fichier Packer pour pouvoir appliquer les standards de déploiement d'infrastructure de votre organisation.

note

La configuration Packer utilisée par Microsoft crée l'image du runner et la stocke dans un resource group donné en entrée. Si vous utilisez le système de galerie d'images partagées (Azure Compute Gallery), il sera nécessaire de modifier le fichier Packer pour ajouter les changements suivants :

  • Ajout du bloc shared_image_gallery_destination pour indiquer la localisation de votre ressource Azure Compute Gallery

Pour l'instant, le fichier Packer des agents Windows est un fichier .json. Pour pouvoir plus facilement modifier le fichier, il est possible de convertir le fichier en .json en fichier .pkr.hcl avec la commande suivante : packer hcl2_upgrade <nom_du_fichier>.json. Le fichier en sortie aura pour nom <nom_du_fichier>.json.pkr.hcl.

  1. Ajout de valeurs aux variables du fichier Packer

Le fichier Packer donné par Microsoft nécessite en entrée un certain nombre de variables d'environnement.

Nous pouvons modifier le fichier Terraform pour remplacer ces appels à des variables d'environnement par les valeurs hardcodées ou bien écrire un script qui créera les variables d'environnement au niveau du pipeline de CD.

Pour la dernière méthode les commandes à utiliser sont :

  • export $variable="<valeur_de_la_variable>" pour un script bash

  • setx $variable '<valeur_de_la_variable>' pour un script PowerShell

info

Il est tout à fait possible d'effectuer ces tâches de manière automatique dans un pipeline de CI et d'envoyer les fichiers formatés dans un pipeline de CD.

Etapes du pipeline de CD

Prérequis

Ici, nous partons du principe que nous stockons les images dans une ressource Azure Compute Gallery et que cette dernière a été créée précédemment.

Le pipeline de CD suit le cheminement suivant :

  1. Création via Terraform de la définition de l'image sur l'Azure Compute Gallery

Construction de l'image Packer dans le pipeline de CD

  1. Création des variables d'environnement sur l'agent de déploiement des images avec le script généré plus tôt

  2. Déploiement de l'image du runner via Packer

L'utilisation de Packer est très similaire à celle de Terraform. Il faut initialiser le projet avec la commande : packer init <emplacement_du_fichier>, puis exécuter le fichier avec la commande : packer build <nom_du_fichier>.pkr.hcl.

note

Il est possible de vérifier la syntaxe du fichier Packer en utilisant : packer validate <nom_du_fichier>.pkr.hcl.

Ainsi, le stage de création de l'image Packer ressemble à ceci sur Azure DevOps :

Stage de création d&#39;image avec Packer

Attention

La création de l'image des runners Windows prend environ entre 4h à 7h. Cependant, le temps de déploiement maximal sur un agent public géré par Microsoft est de 6 heures. Pour éviter un timeout lors de la création de l'image, il est préconisé d'utiliser un agent géré par vous-même autre que Windows (par exemple un agent Linux privé).

Création des agents privés possédant l'image créée depuis Packer

Pour créer les agents privés, nous créons des ressources Virtual Machine Scale Sets comportant l'image que nous avons contruite plus tôt.

info

Les agents créés auront la même configuration que les agents proposés par Microsoft à la date de clonage du dépôt Git.

Microsoft met à jour régulièrement ses fichiers de configuration, il est conseillé de mettre en place un système de mise à jour automatique de l'image Packer afin d'avoir les mêmes configurations que les images windows-latest et ubuntu-latest.

Si toutefois vous avez besoin d'accorder à ces agents l'accès à votre réseau privé, il est possible de les ajouter dans votre réseau privé pour qu'ils puissent effectuer des modifications sur vos ressources privées.

Conclusion

En conclusion, l'utilisation de runners privés Azure DevOps, créés à partir de l'image Microsoft des runners publics via Packer, offre une solution efficace pour les entreprises souhaitant déployer des agents de déploiement propres à leur SI.

Cette approche permet d'apporter une flexibilité nécessaire pour répondre aux besoins spécifiques de l'entreprise. En intégrant ces nouveaux agents et leur création dans leurs workflows, les entreprises peuvent améliorer la gestion des déploiements en s'affranchissant des limites imposées par Microsoft en termes de performance.