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.
What did you put in the ./dronerc?
That depends on your enviroment. In my case, wanting to use Gogs with Drone, I did use following configuration in the dronerc:
REMOTE_DRIVER=gogs
REMOTE_CONFIG=https://NAMEOFMYDNS:USEDPORT?open=false
DEBUG=true
I asked because drone 0.5.0 doesn't recognize these variable however I downgrade to 0.4.0 and It has detected the REMOTE_* variables. Thank you for your posting.
Sorry, I did not point that out too well, I am using drone 0.4 because 0.5 is not ready for production (at least it was not as I was playing around with drone some months back ^^')...
I just wrote down the version in the explanation as well, not only in the dockerfile :).
Thanks!