Comment avoir de couverture de code dans Jenkins avec Jacoco et plusieurs modules?
Mon code structure est comme suit :
événements
messages
autres-code
fonctionnelles-tests
Dans le script de build pour jacoco, d'abord, il a copier toutes les classes et l'utilisation de cette classe de répertoire pour exécuter l'outil. Pouvez-vous nous décrire les étapes wrt les répertoires cibles ici. Je veux dire, comment dois-je mentionner le répertoire d'exécution de la couverture de code.
À construire, chaque dossier a son propre dossier cible avec des classes de côté.
Voici les étapes:
- Projet de construction d'un travail de Jenkins
- De le déployer à l'utilisateur phase
- Exécuter jacoco rapport de travail de Jenkins
Jacoco rapport travail d'explication:
- Étape de génération - maven 3.3.3
objectifs - propre test
et testsuite, l'utilisateur phase de détails et d'autres informations sont transmises. - Étapes Post - exécuter shell
Incapable de format et de le coller ici, donc téléchargé ici: https://zerobin.net/?8a988cd05bf3d752#fbzMlW1b7uzD+HZnmwnd9WjQYBI3j95Q7DCIx6q+l0U=
- Invoquer haut niveau maven cibles - maven 3.3.3
-f jacoco_pom.xml jacoco:dump antrun:run@report
La clasDir
variable qui a été utilisé dans la coquille la pâte doit avoir des classes. Jusqu'à présent, je l'ai fait en début de script shell.
mkdir -p target/classes
cp -R messages/target/classes target/classes
et définir clsDir = target/classes
,
De cette façon, j'ai reçu le rapport sur ce module. Mon testsuite ne contient qu'une classe. Je veux inclure d'autres modules comme events
, other-code
et aussi le lien de la source.
J'ai besoin d'aide sur comment dois-je le mettre en place. Le but principal est de générer des rapports de couverture de code de tests fonctionnels.
EDIT:
Réponse: réponse ci-Dessous aidé, mais il était tout à fait avec les commandes shell pas toute l'INTERFACE utilisateur. Donc, cloner le repo, faire mvn clean package -DskipTests
et de copier sur les tous premier niveau de sous-dossiers à partir de tous les dossiers de module aidé, mais ensuite il a montré l'erreur de couverture Exécution incompatibilité de données pour les fichiers de classe. Ce qui signifie que la classe d'instrumentation et de la classe que nous utilisons pour la couverture sont construits séparément par différentes JVM (un dans Jenkins, un autre c'est déployée dans le stade).
Donc la solution était de ne pas cloner et de les recompiler, mais télécharger le manifeste de déploiement du référentiel et le déballage de tous les pots. De cette façon, j'ai eu toutes les classes de la même version.
veuillez vérifier maintenant.
OriginalL'auteur xploreraj | 2017-02-16
Vous devez vous connecter pour publier un commentaire.
Pour inclure plusieurs cours répertoires en changeant le Jenkins JaCoCo de configuration du plugin, vous devez modifier le Chemin d'accès à la classe des répertoires champ.
Par exemple, si vous souhaitez inclure toutes les classes dans le répertoires "événements" et d'autres "-code", vous devez ajouter les lignes suivantes à la 'Chemin d'accès à la classe de répertoires' section:
Gardez à l'esprit que si vous souhaitez ajouter plusieurs répertoires, vous devez séparées chacune par un point-virgule et il ne peut pas y avoir d'espace (en raison d'un bug avec le plugin). Remarque: cette virgule bug est vrai de tous les champs de texte dans cette configuration du plugin.
Voici mon travail JaCoCo de configuration du plugin:
EDIT: Comme mentionné dans les commentaires, une solution à ce problème est d'utiliser la outil de construction à traiter (Ant, Maven, Gradle) pour déposer le
target
(ie: jar, war, etc.) dans un répertoire, puis il suffit de pointer la jacoco plugin.target
de chaque module dans un répertoire commun appeléclasses
, de cette façon, toutes les classes ont été dans un lieu commun qui pourraient être visés par jacoco lors de l'analyse de la couverture.Si vous utilisez des pipelines et Jenkinsfile voir: stackoverflow.com/a/48685604/1279002
OriginalL'auteur lax1089