Intégration Bamboo
Booster l'efficacité du développement avec l'intégration CppDepend et Bamboo
Ce superbe tutoriel approfondi est basé sur le Intégration NDepend (équivalent de CppDepend pour .NET) écrit par Nordès Lamarre, reproduit ci-dessous avec l'aimable autorisation de l'auteur.
Qu’est-ce que Bamboo ?
En bref, Bamboo est le serveur de build de Atlassian dans sa pile CI. Il est souvent utilisé avec l'intégration de BitBucket et offre également des possibilités de connexion à tout autre dépôt (GitHub inclus). Bamboo lui-même permet de créer des projets de build, des stratégies de déploiement, des interconnexions avec d'autres outils Atlassian ou même d'envoyer automatiquement un message avec le statut du build vers vos canaux #Slack. Si vous avez déjà utilisé Jenkins, Bamboo ou GitLab, vous devriez déjà être familier avec l'usage quotidien d'un tel outil. Pour plus de détails sur Bamboo, veuillez suivre ce lien, il fournit tous les détails sur Bamboo.
Prérequis
- Bamboo Server (ou Agent) sous Windows. Si vous devez installer une nouvelle instance cliquez ici pour télécharger Bamboo.
- Il est obligatoire d'utiliser ou d'installer le JDK 1.8 (ou le JRE semble également fonctionner) dans un dossier dont le nom ne contient aucun espace. Toute version supérieure à 8 ne fonctionnera pas. Cela est censé être supporté à l'avenir.
- Si vous exécutez un serveur de test en local pour voir comment cela fonctionne, il sera accessible sur http://localhost:8085/
- Lors de l'assistant de première utilisation, une clé sera requise pour l'activation (30 jours ou licence réelle). Pour obtenir une licence de 30 jours, accédez à votre espace Atlassian ou utilisez simplement ce lien afin de demander la licence d'évaluation pour votre compte
- Licence CppDepend DevOps ou version d'essai CppDepend active sur la machine de build (ou votre machine actuelle, si vous exécutez Bamboo en local)
- PowerShell n'est pas obligatoire, mais vous verrez plus tard qu'il est indispensable si vous voulez un build propre sans échec
Bamboo - Ajouter la capacité CppDepend
Qu’est-ce qu’une capacité dans Bamboo
Dans Bamboo, pour pouvoir utiliser des outils liés au build, vous devez normalement les configurer pour chaque agent afin d'ajouter une capability spécifique. Dans ce cas, nous allons ajouter la capability CppDepend à un agent Windows. Cette capability pointera vers CppDepend.Console.exe exécutable provenant du package CppDepend précédemment installé/téléchargé. N'oubliez pas de le lancer au moins une fois afin d'activer la licence. Les détails sont disponibles dans la documentation. Dans mon cas, il est installé dans [D:\CppDepend\]. Je préfère garder la version dans le nom du dossier, ainsi il est facile de savoir si mon agent utilise la bonne version de l'outil. Si je change le dossier de l'exécutable, cette capability affectera automatiquement tous les builds qui l'utilisent. Elle ne redéclenchera, en aucun cas, un build automatique. La variable sera alors ré-appliquée à partir du prochain build.
Il est courant de conserver ces capabilities ou exécutables dans cet écran. Il regroupe toutes les fonctionnalités de votre/vos agent(s). Plus de détails sur cette fonctionnalité sont disponibles sur le site Atlassian.
Attention : La capability affiche les dépendances avec les builds existants. Cela dit, si une variable de capability est utilisée dans un script, vous ne verrez nulle part qu'il existe une dépendance active. Pour cette raison, en cas d'agents multiples, vous devez spécifier manuellement quel agent doit être utilisé pour votre stage de build.
Allez à la configuration de votre agent
- Cliquez sur roue des options;
- Sélectionner Agents;
- Cela vous amène dans le panneau d'administration directement sur Agents ressources de build ;
- Sélectionnez l’un de vos Agent de build Windows en cliquant dessus.

Résumé de l’agent
- Vérifiez que votre nom de l’agent est valide ;
- Sélectionnez le Capacités onglet ;
- Cliquez sur Ajouter une capacité bouton de lien.

Ajout de la capacité
- Type de capacité : Exécutable
- Type : Commande
- Libellé de l’exécutable : CppDepend
- Chemin : D:\CppDepend\CppDepend.Console.exe
- Cliquez sur le bouton Ajouter

Voir les capacités spécifiques de l’agent
Comme vous pouvez le voir, après avoir effectué les étapes précédentes, votre capability spécifique à l'agent est ajoutée. Nous pouvons maintenant utiliser cette capability pendant notre build.

Configuration de build Bamboo - Capabilities (facile)
Supposons que votre build existe déjà et que vous souhaitez ajouter Commande CppDepend.Console.exe Dans le tutoriel ci-dessous, j'utiliserai une simple solution Dotnet Core 2.1 comme exemple. Le build sera nommé IdentityServer4.LdapExtension (projet GitHub), où vous auriez votre dépôt Git, votre projet CppDepend et votre build de base déjà configurés (checkout et build).
Ajoutez une nouvelle tâche à votre étape de build
- Assurez-vous d'être dans la configuration de votre projet ;
- Allez dans votre job de build où vous exécutez habituellement vos tests et le reste ;
- Dans le Tâches onglet, vous trouverez tous les détails de votre job actuel ;
- Ajoutez une nouvelle tâche.

Une fois le popup affiché
- Rechercher une commande dans la zone de recherche ;
- Sélectionner la commande en cliquant dessus.

Configurons la commande
- La nouvelle tâche de commande devrait déjà s'afficher ;
- La description de la tâche, dans ce cas : CppDepend;
- Sélectionnez l'exécutable que vous avez créé pour votre capability d'agent : CppDepend;
- Saisissez en argument le chemin complet de votre fichier projet CppDepend (extension .cdproj). Avant cela, assurez-vous que dans l'interface CppDepend, sous CppDepend Project Properties > Paths Referenced, tous les chemins sont définis comme relatifs (à l'emplacement du fichier projet).Exemple : ${bamboo.build.working.directory}/IdentityServer.LdapExtension.cdproj
Vous pouvez ajouter le /silent option si vous ne souhaitez pas voir tous les logs de sortie de CppDepend, mais je déconseille fortement de le faire dans un build. Vous pourriez avoir besoin de déboguer à l'aide des logs. - Enregistrez votre configuration

Créez votre nouvelle configuration
Je recommande de toujours lancer un build après avoir effectué une modification. Ainsi, il est facile de voir si vous avez causé l'échec du build pour une raison réelle (configuration) ou si c'est dû à un changement de code (builds déclenchés).
Notez que CppDepend.Console.exe retourne code de sortie non nul code, lorsqu'au moins un Quality Gate échoue. Ce code de sortie peut être utilisé pour arrêter votre processus de build dans une telle situation. Voir plus d'explications dans la page des quality gates.
Le rapport existera même en cas d'échec, cependant le build sera rouge et votre artefact ne sera probablement même pas disponible. Comme il n'y a pas de /ErrorLevel configuration personnalisée pour le code de sortie, vous devrez procéder différemment pour ignorer ces erreurs.
- Option 1 : Ignorez les erreurs en ajoutant les balises spéciales de CppDepend dans votre code. Dans ce cas, ajoutez simplement les attributs ignore de CppDepend là où c'est nécessaire et relancez un build après votre commit.
- Option 2 : Utilisez un script au lieu d'une commande afin de contrôler complètement votre flux et de continuer même en cas de problème de quality gate. C'est le sujet de la section suivante.
Configuration de build Bamboo - script PowerShell (complexe)
Comme indiqué précédemment, cette section s'adresse plutôt à ceux qui ont déjà un projet sans problème grave faisant échouer un quality gate, ou qui souhaitent échouer sur le quality gate tout en voulant générer des rapports.
Ne vous méprenez pas, le Capacité créé en vaut la peine. Cependant, le seul inconvénient dans ce cas est que la Capability ne détectera pas notre dépendance de build à CppDepend.
Dans ce cas, au lieu de créer une commande, nous allons créer un script (ou l'ajouter au script de build Dotnet Core actuel)
- Allez dans votre configuration de build, étape par défaut (ou une spécifique) et cliquez sur Ajouter une tâche;
- Sélectionnez le Script type ;
- Saisissez le description et sélectionnez Windows PowerShell comme interpréteur ;
- Dans ce cas, nous utiliserons le Inline type au lieu d'un script shell PS1. Cette option créera automatiquement un script shell en coulisses. Réécrivez simplement l'extrait de code sous l'image.

Le PowerShell utilise le fichier projet CppDepend existant (extension *.cdproj, c'est un fichier XML). Ensuite, il crée la commande finale et l'exécute (Invoke-Expression). Voici le script PowerShell utilisé dans l'image ci-dessus.
# De cette façon, vous pouvez utiliser un script de build au lieu d'inline, et ce script de build
# peut faire partie de votre dépôt de build.
$cdproj = "IdentityServer.LdapExtension.cdproj"
# Charger le fichier projet XML CppDepend.
$ndependXml = [xml](Get-Content .\${cdproj})
# Lancer la commande CppDepend
$expr = "${bamboo.capability.system.builder.command.CppDepend} " +`
"${bamboo.build.working.directory}\${cdproj} " +`
"/OutDir ${bamboo.build.working.directory}\CppDependOut"
Invoke-Expression $expr
# Sortie simple pour le résultat d’exécution.
write-host "The exit code was: ${LASTEXITCODE}"
Générer l’artefact CppDepend
Vous devriez maintenant pouvoir builder et obtenir le dossier de sortie CppDepend. Dans cette démo, nous avons CppDependOut que le dossier. Pour cela, nous devons ajouter la configuration d'artefact. Veuillez retourner dans la configuration du Build et dans votre stage par défaut où se trouve le script CppDepend. Une fois cela terminé, sélectionnez le Artefacts onglet et cliquez sur Créer un artefact bouton.
Les champs à saisir sont :
- Nom : CppDepend
- Emplacement : CppDependOut
- Modèle de copie : **/*
Une fois cela terminé, vous devriez pouvoir recompiler votre projet et voir si votre artefact de build est présent. Notez que si vous voulez comparer vos builds, vous pourriez réutiliser l'artefact partagé. C'est un peu plus complexe, mais c'est possible et cela ne sera pas exploré dans ce tutoriel. Vous pourriez simplement éviter de nettoyer le dossier de build à chaque nouveau build. Je ne le suggère pas, mais c'est quelque chose qui pourrait fonctionner.
Par exemple, voici un build réussi :
- Build vert = succès
- Allez dans les artefacts de votre build
- Cliquez sur le nom de l'artefact qui vous intéresse (CppDepend dans ce cas)

Une fois l'artefact ouvert, il affichera le contenu du fichier ZIP. Cliquez simplement sur le fichier CppDependReport.html. Cela ouvre un lien qui ressemble à : http://localhost:8085/artifact/I4E-ID/shared/build-19/CppDepend/CppDependReport.html#Main
Votre page devrait ressembler à ceci (cela dépend en fait de votre projet) :

Essayez CppDepend aujourd'hui
Commencez votre essai gratuit de 14 jours avec accès complet à toutes les fonctionnalités de documentation. Sans carte bancaire.
