Featured image of post SonarQube в Jenkins

SonarQube в Jenkins

Установка Sonarqube в CI/CD Pipeline Jenkins

Архитектуру процесса и описание можно найти в моём телеграм канале
Там же задать вопрос или просто пообщаться
Присоединяйся Telegram

Требования для сервера SonarQube
OC:Ubuntu
CPU:4
RAM:8 Gb
HDD:50 Gb
Установленное ПО:docker, docker-compose
Навыки:Знания docker и jenkins

Установка сервера SonarQube

Поднимаем сервер на Ubuntu. На сервере SonarQube. Создаём директорию:

1
mkdir /opt/sonarqube && cd /opt/sonarqube

Если сеть закрытая и нет доступа к инету после установки создать файл:

1
nano /opt/sonarqube/sonar.properties

И добавить строку:

1
sonar.updatecenter.activate=false

Меняем владельца:

1
chown 1000:root sonar.properties`

docker-compose файл:

nano docker-compose.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
version: '3'
services:
  sonarqube:
    image: sonarqube:25.10.0.114319-community
    container_name: sonarqube
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
      - SONARQUBE_JDBC_USERNAME=sonar
      - SONARQUBE_JDBC_PASSWORD=password #Меняйте на свой
    ports:
      - "9000:9000"
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      - ./sonar.properties:/opt/sonarqube/conf/sonar.properties  #Если файл sonar.properties не создавали удалите эту строку
    depends_on:
      - db
    networks:
      - sonarnet

  db:
    image: postgres:15
    container_name: sonarqube-db
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=password #Меняйте на свой 
      - POSTGRES_DB=sonar
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    networks:
      - sonarnet

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:

networks:
  sonarnet:
    driver: bridge

Запускаем:

1
docker-compose up -d

Конфигурация сервера SonarQube

Заходим на сервер Sonar http://IP:9000/

Логин и пароль: admin:admin

Меняем на свой (12 символов)

Создаём локальный проект:

Называем его. В моём случае Jenkins_scan.

Default

Далее создаём токен для синхронизации с Jenkins:

My account -> Security - Generate Token

Полученный токен вставить в Jenkins -> Credentials -> Add Credentials -> Secret Text и вставить Токен

Настройка синхронизации в Jenkins.

Сервер Сонара у нас готов. Далее работаем с Jenkins.
Устанавливаем плагин SonarQube Scanner for Jenkins:

Настройки -> System -> SonarQube servers -> Задаем имя сервера, URL и выбираем креды созданные ранее.

Дальше два варианта.
На сервере Jenkins или Slave, в зависимости от того, где собирается код, нужно установить SonarQube CLI для выполнения сканирования.

1
2
Name: sonar_scanner
RUNNER_HOME: /var/jenkins_home/sonar

Если сервер Jenkins (Slave) имеет выход в инет, то можно скачать CLI во время сборки. Jenkins -> Tools -> SonarQube Задаём имя сканера и версию:

1
Name: sonar_scanner

Написание Pipeline Jenkins

Далее создаём или встраиваем в Pipeline-Jenkins

Я создаю параметр для сборок, чтобы они перемещались на сервере SonarQube в Project: Jenkins_scan

Пример моего пайплайна (данные репозитория ваши):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                // Клонируем репозиторий из GitHub
                git(
                    url: 'https://github.com/ZM56/itzm',
                    branch: 'main',
                )
            }
        }
        stage('SonarQube Analysis') {
            environment {
                scannerHome = tool 'sonar_scanner'
            }
            steps {
                script {
                    withSonarQubeEnv("sonar_server") {
                        sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=${project}"
                    }
                }
            }
        }
    }
}

Запуск проверок

Запустить тесты:

Успешно. Идём на сервер SonarQube.

Наш код проверен. Можем перейти в подробности.

Установка завершена. Можете при сборке использовать как скан вашего Git репозитория. Jenkinsfile при сборке и прочее на ваш вкус.

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Telegram GitHub YouTube