Dans quelles situations faut-il utiliser les options de Clean des pipelines d’Azure DevOps ?
Diverses tâches d’Azure Pipeline disposent d’options de Clean
permettant de supprimer les fichiers inutiles (artefacts, binaires des précédentes builds, dossiers bin/obj et...). Ces options sont disponibles sur les tâches de compilations, les tâches de copies de fichiers, et dossiers.
Des développeurs un peu trop zélés auraient tendance à activer ces options à défaut. Malheureusement, celles-ci peuvent augmenter inutilement la durée d’exécution de la build. Il convient donc de prendre un peu de temps pour réfléchir à l’utilité de telles options.
Pour savoir si l’on peut avoir besoin d’utiliser des options de Clean
, il convient de répondre à quelques questions simples :
- Où s’exécutent les builds ?
- Quel gestionnaire de code source est utilisé ?
- Les builds utilisent elles les dossiers de binaires en plus du staging des artefacts (BinariesDirectory) ?
L’usage des options de clean est conditionné par la combinaison de vos réponses à ces trois questions.
Voulant faire simple, j’ai choisi de construire un tableau indiquant les situations pour lesquelles, un Clean
est utile.
Source control | BinariesDirectory | |||
---|---|---|---|---|
Agent de build | Git | TFVC | Oui | Non |
Microsoft hosted | Non | Non | Non | Non |
Self hosted / Azure VMs Scale Set |
Non | Oui | Oui | Non |
Pour résumer simplement les raisons qui ont conduit à apporter ces réponses :
- Les agents de builds hébergés par Microsoft sont détruits après chaque exécution. Un agent ne conserve donc aucune trace des précédentes builds, contrairement aux VM Azure, et agents que l’on héberge soit même.
- Avant de télécharger, du code versionné via git, un pipeline lance la commande
git clean -ffdx
(par défaut). Celle-ci effectue un clean du repository local. Le répertoire contant le code source est donc propre, quoi qu’il arrive (par défaut). - Le Workspace TFVC n’est pas nettoyé entre les builds. Il en est de même pour les dossiers des binaires, et des tests uhnitaires.
Conclusion
Aucun mécanisme de Clean
n’est nécessaire pour un usage 100% Cloud d’Azure DevOps, sauf si on utilise des VM Azure. Il en est de même pour un usage hybride avec Azure DevOps Server, et des agents Microsoft hosted.
Un usage 100% on-premise demandera donc un peu plus de réflexion.