SONAR

Runnning in docker

docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

API

fetch issues

curl -s -u ${SONAR_TOKEN}: "http://localhost:9000/api/issues/search?componentKeys=${PROJECTNAME}" | jq

general

curl -s -u ${SONAR_TOKEN}: "http://localhost:9000/api/measures/component?component=${COMPONENT}&metricKeys=ncloc,complexity,violations,code_smells,sqale_rating,alert_status,bugs,reliability_rating,security_rating,coverage,lines_to_cover,tests" | jq

References

Sonar on k8s

helm repo add sonatype https://sonatype.github.io/helm3-charts/

Sonar oidc setup

https://github.com/vaulttec/sonar-auth-oidc

Install on ec2

sudo apt update
sudo apt install openjdk-11-jdk -y
sudo apt install postgresql postgresql-contrib

sudo -u postgres psql -c "CREATE USER sonarqube WITH PASSWORD 'Password';"
sudo -u postgres psql -c "CREATE DATABASE sonarqube OWNER sonarqube;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;"

sudo useradd -b /opt/sonarqube -s /bin/bash sonarqube
cat <<EOF | sudo tee -a /etc/sysctl.conf
vm.max_map_count=524288
fs.file-max=131072
EOF
sudo sysctl --system

cat <<EOF | sudo tee -a /etc/security/limits.d/99-sonarqube.conf
sonarqube   -   nofile   131072
sonarqube   -   nproc    8192
EOF

sudo apt install unzip software-properties-common wget -y
wget -q https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip -O /tmp/sonarqube-9.9.0.65466.zip
sudo unzip /tmp/sonarqube-9.9.0.65466.zip -d /opt
sudo mv /opt/sonarqube-9.9.0.65466 /opt/sonarqube
sudo chown -R sonarqube:sonarqube /opt/sonarqube
cat <<EOF | sudo tee -a /opt/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonarqube
sonar.jdbc.password=Password
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
sonar.web.host=127.0.0.1
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
sonar.core.serverBaseURL=https://sonar.46.51.148.69.nip.io
EOF

cat <<EOF | sudo tee -a /etc/systemd/system/sonarqube.service
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
User=sonarqube
Group=sonarqube
Restart=always
LimitNOFILE=131072
LimitNPROC=8192

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now sonarqube.service

Install caddy for sonar

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 9000 -j ACCEPT

Setup Sonar on Jenkins

It will use SonarQube servers from JENKINS_URL/Manage Jenkins/Configure System

withSonarQubeEnv('My SonarQube Server')

    def scannerHome = tool 'SonarQube Scanner 4.8.0.2856';
    withSonarQubeEnv() {
      sh "${scannerHome}/bin/sonar-scanner
    }

define sonar-project.properties

cat <<EOF | tee -a > sonar-project.properties
sonar.projectKey=0.0.1
sonar.java.source=17
sonar.projectName=XXXX
sonar.host.url=https://localhost.nip.io
sonar.login=XXXX
sonar.sources=Api/src/main
EOF

export JAVA_HOME=/home/ubuntu/tools/hudson.model.JDK/amazon-corretto-17/amazon-corretto-17.0.6.10.1-linux-x64
export M2_HOME=/home/ubuntu/tools/hudson.tasks.Maven_MavenInstallation/maven-3.8.4
export MAVEN_HOME=/home/ubuntu/tools/hudson.tasks.Maven_MavenInstallation/maven-3.8.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

References