Sonarqube is an really useful tool to check for different kind of errors in all kinds of programming languages. If you want to check out Sonarqube in a livedemo, just go over to https://sonarqube.com/. In the last two parts of my Docker series we created an gogs Git Repo as docker container and then went over to integrating gogs with drone (Version 0.4), an CI Build Server - also as Docker container. Today, we want to install Sonarqube as a tool to check upon our software quality, so that - as soon as we push an update to our gogs project, drone will execute an analysis using Sonarqube - which will give us information about different kind of errors and code quality.
# We will start by creating the needed folders:
sudo mkdir /var/sonarqube
sudo mkdir /var/sonarqube/data
sudo mkdir /var/sonarqube/extensions
sudo chown -R yourusername:yourusername /var/sonarqube
# Then we change our drone docker-compose.yml, so that drone and sonarqube will be started at the same time
sonarqube: restart: unless-stopped image: sonarqube:lts-alpine volumes: - /var/sonarqube/data:/opt/sonarqube/data - /var/sonarqube/extensions:/opt/sonarqube/extensions environment: - SONARQUBE_HOME=/opt/sonarqube - SONARQUBE_JDBC_USERNAME=sonar - SONARQUBE_JDBC_PASSWORD=sonar - SONARQUBE_JDBC_URL= ports: - "9000:9000" - "9092:9092" drone: restart: unless-stopped image: drone/drone:0.4.2 volumes: - /var/drone:/var/lib/drone - /var/run/docker.sock:/var/run/docker.sock env_file: - ./dronerc ports: - "8000:8000" links: - sonarqube
After that, we can start the service with docker-compose up -d and see Sonarqube on http://IPADDRESS:9000 (needs some time to load...).
To do an check of i.e. an Java Project, we need to write an new pom.xml file:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.appexample</groupId> <artifactId>appexample</artifactId> <version>1.0</version> <name>phpTest</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <sonar.language>java</sonar.language> <sonar.sources>src</sonar.sources> <sonar.exclusions>src/test/test.php, src/test/test/*</sonar.exclusions> </properties> </project>
and we need a new .drone.yml
cache: mount: - /drone/.m2 build: main: image: maven:3-jdk-8-onbuild commands: - mvn sonar:sonar -Dsonar.host.url=http://IPOFTHESONARQUBESERVER:9000 -Dmaven.repo.local=/drone/.m2 - echo "Sonarqube has been completed." - mvn clean install -Pcoverage -Dmaven.repo.local=/drone/.m2 - mvn package -Dmaven.repo.local=/drone/.m2 - mvn test -Dmaven.repo.local=/drone/.m2 - echo "Build has been completed." debug: true
And thats it :). Login into drone, activate your repo as valid CI repo and after that - with every push to that gogs repo, a new sonarqube analysis should be performed.