Pour ceux qui ont du mal à faire fonctionner sonarcloud.io avec l'action github pour une application java gérée par un projet multi-module maven.
J'ai créé un projet Spring Maven multi-module et je voulais pouvoir utiliser le sonar de sonarcloud.io pendant une action spécifique de github.
Projet Github : https://github.com/MagicSoup/SpringJOOQ
Projet Sonar Cloud : https://sonarcloud.io/dashboard?id=MagicSoup_SpringJOOQ
Vous pouvez trouver mon action Github ici : https://github.com/MagicSoup/SpringJOOQ/blob/master/.github/workflows/maven-master.yml
sonar:
name: Test - SonarCloud Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: SonarCloud Scan
run: mvn -B clean verify -Psonar -Dsonar.login=${{ secrets.SONAR_TOKEN }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Et à l'intérieur de mon pom.xml Root le profil sonar : https://github.com/MagicSoup/SpringJOOQ/blob/master/pom.xml
<profile>
<id>sonar</id>
<properties>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.organization>magicsoup</sonar.organization>
<sonar.projectKey>MagicSoup_SpringJOOQ</sonar.projectKey>
<sonar.moduleKey>${project.groupId}:${project.artifactId}</sonar.moduleKey>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>${sonar.version}</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sonar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Ici, les informations importantes sont les clés suivantes :
- <sonar.projectKey>MagicSoup_SpringJOOQ</sonar.projectKey>
- <sonar.moduleKey>${project.groupId}:${project.artifactId}</sonar.moduleKey>
Sans la définition de sonar.moduleKey, j'avais des problèmes sur plusieurs projets avec la même clé.
Pendant la création du projet dans sonarcloud.io https://sonarcloud.io/projects/create en utilisant le dépôt github d'analyse, un message s'affiche indiquant que vous devez utiliser une autre méthode que celle automatisée car elle ne fonctionne pas pour les applications java. Vous choisirez alors celle qui propose "maven,gradle,..." et vous trouverez toutes les propriétés obligatoires à ajouter dans votre pom.xml maven. Y compris le sonar.login que vous devez exporter comme un jeton secret dans github).
Vous pouvez créer votre jeton secret ici : https://github.com/User/Project/settings/secrets Vous devez être authentifié et modifier l'utilisateur et le projet en conséquence.
Un excellent article sur le sujet : https://medium.com/faun/continuous-integration-of-java-project-with-github-actions-7a8a0e8246ef