Intégration Jenkins
Booster l'efficacité du développement avec l'intégration CppDepend et Jenkins
Ce superbe tutoriel approfondi est basé sur le Intégration de NDepend (l'équivalent de CppDepend pour .NET) écrit par Richard Moss.
Prérequis et remarques
- Ce guide suppose que vous êtes familier avec Jenkins et la configuration de projets freestyle,
- Pour publier des rapports consultables dans Jenkins, vous devez avoir installé HTML Publisher plugin
- La GUI CppDepend a été utilisée pour créer un fichier projet CppDepend pour une analyse ultérieure
- Un projet freestyle existant est disponible, qui extrait et compile déjà avec succès les assemblys que le projet CppDepend va traiter
- CppDepend doit être installé sur toute machine utilisée comme agent de build Jenkins. J'ai testé les versions 6 et 7 sans problème
- La politique de sécurité de contenu par défaut de Jenkins empêche les rapports CppDepend intégrés d'être affichés correctement. Ce guide contient des instructions pour reconfigurer la politique
Appeler CppDepend
À l'heure actuelle, il n'existe pas de plugin Jenkins dédié à CppDepend, nous sommes donc quelque peu limités dans le niveau d'intégration possible.
La première étape consiste à appeler CppDepend. Nous pouvons le faire en ajoutant Exécuter une commande batch Windows étape à notre projet, puis définissez le Commande champ à appeler CppDepend.Console.exe en passant le nom de fichier de notre projet.
CppDepend.Console.exe exige que le nom du fichier projet soit pleinement qualifié. Vous pouvez utiliser la variable d'environnement %WORKSPACE% pour obtenir le chemin pleinement qualifié de l'espace de travail de l'agent et y ajouter le nom de votre fichier projet
J'ai CppDepend et d'autres outils similaires utilisés par les builds enregistrés dans SVN afin qu'ils soient automatiquement extraits dans l'espace de travail d'un agent de build. Dans mon cas, je peux donc utiliser un chemin relatif pointant vers CppDepend.Console.exe Alternativement, si l'emplacement des binaires de CppDepend fait partie du path du système, vous pouvez omettre complètement le chemin.

Utiliser des chemins absolus ou relatifs dans un projet CppDepend
Par défaut, tous les chemins et noms de fichiers dans le projet CppDepend sont absolus. Les builds Jenkins ont lieu dans un espace de travail temporaire, dont l'emplacement peut être différent pour chaque agent. Dans de tels scénarios, l'utilisation de chemins absolus peut entraîner soit un échec complet, soit des résultats obsolètes / inattendus.
Il existe deux façons de contourner ce problème : la première consiste à utiliser des commutateurs de ligne de commande pour remplacer les chemins dans le projet, et la seconde à les rendre relatifs.
Remplacement des chemins absolus
Le InDirs et OutDir arguments peuvent être utilisés pour spécifier des chemins de remplacement. InDirs contrôle où se trouvent tous les fichiers sources à analyser et OutDir spécifie où le rapport sera écrit. Notez que InDirs vous permet de spécifier plusieurs chemins si nécessaire.
Configurer CppDepend pour utiliser des chemins relatifs
Ces instructions s'appliquent à l'outil autonome, mais devraient aussi fonctionner depuis l'extension Visual Studio.
- Ouvrez le Propriétés du projet CppDepend éditeur
- Sélectionnez le Chemins référencés onglet
- Dans la liste des chemins, sélectionnez chaque chemin à rendre relatif
- Clic droit et sélectionner Définir comme chemin relatif (à l'emplacement du fichier projet CppDepend)
- Enregistrez vos modifications
Faire échouer le build
Si le Exécuter un batch Windows commande renvoie une valeur non nulle, Jenkins fera échouer le build par défaut. Quand CppDepend s'exécute avec succès et qu'aucune Le quality gate échoue il retournera alors le zéro attendu. Cependant, même s'il s'est exécuté avec succès par ailleurs, il retournera une valeur non nulle en cas d'échec du Quality Gate.
Selon vos besoins, vous pourriez vouloir désactiver ce comportement. Par exemple, si vous utilisez CppDepend avec une base de code existante, vous aurez potentiellement de vraies violations à investiguer, ou des faux positifs.
Nous pouvons gérer cela soit en marquant le build comme instable, soit en supprimant l'erreur.
Marquer le build comme instable
Le Exécuter une commande batch Windows a un paramètre supplémentaire (caché derrière Avancé bouton) nommé ERRORLEVEL pour marquer le build instable. En définissant la valeur de ce champ sur 1 (le code de sortie que CppDepend retournera lorsque des violations critiques seront rencontrées), alors le résultat du build sera Unstable, mais l'exécution continuera.
Suppression de l’erreur
Comme nom de l’étape, Exécuter une commande batch Windowsle suggère, il ne s'agit pas de l'exécution d'une seule commande. Jenkins créera un fichier batch basé sur le contenu du champ Command, qu'il exécutera ensuite. Par conséquent, pour supprimer l'erreur, nous devons simplement quitter le fichier batch nous-mêmes, ce qui nous permet de fournir notre propre code de sortie.
Pour cela, ajoutez simplement exit /b 0 comme nouvelle ligne dans le Commande champ, et tout code d'erreur existant sera ignoré.
Si vous faites cela et que CppDepend ne s'exécute pas pour une autre raison, vous ne le saurez pas à moins de consulter les fichiers journaux. Je me contenterais probablement de marquer le build comme instable, mais vous pourriez aussi modifier la commande pour vérifier manuellement les valeurs ERRORLEVEL et agir en conséquence.
Publication du HTML
Une fois l'analyse CppDepend terminée, un rapport HTML est généré. Bien que ce rapport n'offre pas le niveau de fonctionnalité de la visualisation des résultats dans l'interface graphique de CppDepend, il fournit de nombreuses données utiles.
Pour l’intégrer à Jenkins, nous devons ajouter un Publier les rapports HTML étape post-build.
- Définir le Répertoire HTML à archiver champ pointer vers l'emplacement où le rapport CppDepend a été enregistré - par défaut, c'est un dossier nommé CppDependOut situé dans le même dossier que le projet CppDepend.
- Définir le Page[s] index champ comme nom du rapport, qui est toujours CppDependReport.html
- Enfin, définissez le Titre du rapport champ à la valeur de votre choix - elle servira à libeller les liens de navigation dans Jenkins

Affichage du rapport
Comme je l'ai mentionné au début de cet article, Jenkins a une politique de sécurité qui restreint les ressources intégrées. Cette politique handicape le rapport CppDepend, vous devrez donc assouplir légèrement les restrictions comme comme dans mon message précédent.
Une fois votre job Jenkins exécuté et terminé avec succès, de nouvelles options de navigation pour visualiser les rapports devraient apparaître dans la barre latérale du job, ainsi que dans la vue d'ensemble du statut, donnant accès au rapport CppDepend.

Utiliser des fichiers de ressources externes pour éviter la duplication
Un autre comportement par défaut de CppDepend est de sauvegarder toutes les règles dans le fichier projet. Ces règles de base augmentent considérablement la taille du projet CppDepend, et si vous ne les modifiez pas, cela n'a pas vraiment de sens de les dupliquer encore et encore.
Heureusement, CppDepend permet de stocker les règles dans des fichiers externes, j'ai donc utilisé l'interface graphique de CppDepend pour créer un fichier de règles. Maintenant, chaque projet a vu toutes ses règles intégrées supprimées et référence simplement le fichier externe. Pratique !
Si vos projets utilisent des chemins absolus, vous pouvez simplement /RuleFiles et /KeepProjectRuleFiles paramètres avec CppDepend.Console.exe pour remplacer les versions absolues si nécessaire.
De même, CppDepend version 2017 introduit de nouveaux paramètres pour la dette du projet, mais offre également la possibilité de les stocker dans un fichier externe. Malheureusement, il ne semble pas y avoir de commutateurs de remplacement disponibles dans CppDepend.Console.exe, mais comme je n'ai pas encore testé les fonctionnalités de dette technique, je ne sais pas si ce sera un problème ou non. (Remarque de l'équipe CppDepend : vos retours sont les bienvenus à ce sujet)
Essayez CppDepend aujourd'hui
Commencez votre essai gratuit de 14 jours avec accès complet à toutes les fonctionnalités de documentation. Sans carte bancaire.
