Для решения задачи потребуется предварительная подготовка:
Первые две строчки отвечают за связь с агента SQ Scanner с центральным сервером SQ. Sonar.projectKey – уникальный ключ для проекта, заведенный в Sonarqube.
Sonar.qualitygate.wait – проверка доступности Sonar, при недоступности – сбой работы пайплайна. Далее 4 строки дополнительные, указывают как и что необходимо сканировать в текущем репозитории, применимы исключительно для языка программирования используемого в репозитории.
- Установлен и развернут SonarQube (далее SQ), подключены необходимые плагины для анализа кода.
- Установлен и развернут Gitlab, установлен и настроен Gitlab runner, позволяющий запускать Docker-контейнеры.
- Создан и наполнен репозиторий с кодом для передачи на анализ.
Как подключить проект к SonarQube
- Подключаемся к SQ и в правой верхней части экрана нажимаем на символ + и Создаем новый проект.
- Заполняем поля: Project key – Уникальный идентификатор проекта; Display name – Название проекта, используемое для отображения в системе SQ. После заполнения полей нажимаем Set Up.
- Необходимо сгенерировать значение Token, используемое для однозначного определения проекта в системе и передачи результатов тестирования агентом.
- Далее необходимо ответить на вопрос о используемом языке программирования и среде запуска Sonar-агента.
Работа с репозиторием проекта в Gitlab
-
- Создаем в репозитории файл sonar-project.properties. С указанием ключа и параметра, обеспечивающие связь с SQ:
sonar.projectKey=Uniq_Project_Key_ =true sonar.inclusions=**/*.bsl,**/*.os,**/*.xml sonar.exclusions=**/Reports/**/ sonar.exclusions=**/Reports/\u0420\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d*/**/*.* sonar.lang.patterns.xml=**/*.xsd,**/*.xsl
- Переходим в раздел CICD для настройки stage, отвечающего за проверку кода.
sonarqube-check: stage: CodeCheck image: name: sonarsource/sonar-scanner-cli:latest entrypoint: [""] variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - sonar-scanner allow_failure: true timeout: 2 hours tags: - docker only: - merge_requests - main - develop
Мы можем помочь в настройке SonarQube, CICD и поддержке инфраструктуры в рамках DevOps-аутсорсинга!