Themis analyse les rapports produits par Jacoco uniquement au format XML.
Préparation de la source dans Themis
Les rapports de couverture de code produits sont associés à un de vos dépôts de code. Vous devez indiquer à votre source Themis que les données liées à la couverture de code proviendront de rapports externes.
Pour cela, rendez-vous dans la partie Administration, puis Projets et identifiez la Source concernée. Ajoutez ensuite deux plugins respectivement pour les pratiques Couverture de code et Test-First Development, en indiquant Import de rapports de couverture de code depuis des fichiers externes. Pour rappel, l'ajout d'un plugin se fait en ouvrant la liste des plugins de la source, puis en cliquant sur Ajout un plugin.
Il n'y a pas besoin ici de préciser qu'il s'agit d'un rapport Jacoco, cela se fera au moment de l'envoi des fichiers.
Envoi de rapports avec le plugin Jenkins
Pré-requis : Lorsque vos tests unitaires automatisés sont exécutés dans Themis, un ou plusieurs rapports Jacoco sont produits.
Dans Jenkins, ajoutez une étape dans la partie Actions à la suite du build, en cliquant sur la liste déroulante Ajouter une action après le build. Sélectionnez Send report files to Themis.
Sélectionnez l'instance de Themis et indiquez la clé de la source associée au dépôt de code en cours d'analyse dans Jenkins.
Dans la section Report Files, sélectionnez pour Type la valeur Jacoco. Puis dans Path, indiquez une ou plusieurs expressions (séparées par des virgules) permettant d'accéder aux fichiers XML produits par Jacoco.
Par exemple, si vous utilisez Maven + Jacoco, votre projet a probablement l'architecture suivante après exécution des tests :
pom.xml
module1
------- pom.xml
------- target/site/jacoco/jacoco.xml
module2
------- pom.xml
------- target/site/jacoco/jacoco.xml
Dans cet exemple, vous avez 2 modules Maven dans votre projet. L'expression à indiquer sera la suivante : **/target/**/jacoco.xml
Envoi de rapports via l'API REST
Si vous n'utilisez pas Jenkins, ou ne souhaitez pas utiliser le plugin Jenkins, il est possible d'utiliser l'API de Themis pour synchroniser les rapports de couverture Jacoco. Voici un exemple de script BASH que vous pouvez implémenter dans un autre langage si vous le souhaitez (les variables au début sont à adapter dans votre contexte) :
#!/bin/bash
#TOCHANGE
THEMIS_URL="http://mythemis.com"
SOURCE_KEY="da4e11f4-5489-4b2a-a028-20d071b1c671"
API_KEY="NWJjZWQ3ZmNhYTJhYzkwMWRmNGZhYTYx"
JACOCO_REPORT_FILE="jacoco.xml"
CURRENT_COMMIT=$(git rev-parse HEAD) #Current GIT commit
#For SVN : $(svn info --show-item last-changed-revision)
CURRENT_DATE=$(date +%s)"000"
WORKSPACE=$(pwd) #the root directory of the source code repository
REPORT_ARCHIVE="themis_report.zip"
#First of all, create a directory with all Jacoco reports
REPORT_DIR=$(mktemp -d -p /tmp)
find . -name $JACOCO_REPORT_FILE -exec cp --parents \{\} $REPORT_DIR \;
if [ -e $REPORT_ARCHIVE ];then
echo "Remove existing archive"
rm $REPORT_ARCHIVE
else
echo "File "$REPORT_ARCHIVE" does not exist"
fi
#Create archive to send to Themis
zip -r $REPORT_ARCHIVE $REPORT_DIR
curl -i \
-H "Content-Type: multipart/form-data" \
-H "Accept: application/json,application/zip" \
-H "themis-api-key:$API_KEY" \
-X POST \
-F 'metadata={
"executionDate" : "'$CURRENT_DATE'",
"dataType" : "jacoco",
"commit" : "'$CURRENT_COMMIT'",
"dataWorkspace" : "'$WORKSPACE'"};type=application/json' \
-F "archive=@"$REPORT_ARCHIVE";type=application/zip" \
$THEMIS_URL/api/reportFiles/$SOURCE_KEY
rm -rf $REPORT_DIR
rm $REPORT_ARCHIVE
Commentaires
Vous devez vous connecter pour laisser un commentaire.