помещение
В этой статье записаныSonarQubeПодробный процесс построения сервиса применительно к облачной миграцииPipleLineссылка на сканирование кода.
У автора есть обновление версии программного обеспечения обсессивно-компульсивного расстройства, и в целом ему нравится использовать последнюю версию программного обеспечения.При написании этой статьи (2020-05-17)SonarQubeПоследняя версия8.3.1.
Введение в SonarQube
SonarQubeЭто открытая платформа для управления качеством кода, которая объединяет тысячи правил автоматического статического анализа кода с целью повышения качества кода и безопасности разработчиков, чтобы разработчики могли писать более чистый и безопасный код. В основном он обеспечивает три относительно большие функции:
- Поддержка надежности кода: заблаговременно выявляйте и сообщайте об ошибках в коде, чтобы избежать неопределенного поведения, влияющего на конечных пользователей.
- Поддержка безопасности приложений: устраняйте уязвимости, которые могут поставить под угрозу приложения, и учитесь с помощью горячих точек безопасности.
AppSec(Простое понимание заключается в том, чтобы учиться и выявлять новые уязвимости). - Техническая поддержка долга: обеспечение чистоты и удобства обслуживания управляемой кодовой базы для повышения производительности разработчиков.
В настоящее времяSonarQubeПоддерживает 27 языков программирования, в основном охватывая проекты, написанные на современных основных языках программирования:
Упомянутые выше функции могут быть относительно общими.SonarQubeСделайте следующее:
-
CI/CDпроцесс присоединиться кSonarQubeСканирующая ссылка. - Внедрите пороги качества кода и пройдите только этот тест порога качества перед переходом к следующему процессу.
- Проекты, качество кода которых ниже порогового, должны вовремя корректировать соответствующий код.
Пороги качества могут быть настроены,SonarQubeДля каждого проекта будет подробная панельная информация, в которой будет указано текущее состояние здоровья проекта, классификация и подробные сведения об уязвимостях на разных уровнях, а также многомерная статистическая информация об уязвимости, соответствующая заявителю, что удобно для отслеживание и устранение проблем. Например, автору нужно запустить сборочную линию при запуске последнего проекта компании, иSonarQubeУстанавливаются различные уровни порогов.Для старых проектов будет использоваться порог самого низкого уровня: количество блокирующих ошибок должно быть равно 0, а для некоторых новых проектов требования к качеству, такие как серьезные ошибки, строго должны быть равны 0, и т. д., если проверка порога качества не пройдена, проект не может быть запущен.
Установка SonarQube
При нормальных обстоятельствах нужно только установить бесплатную версию сообщества.SonarQubeСервис можно установить на основе бинарного файла или использовать напрямуюDockerПосле загрузки образа для запуска процесс установки бинарного файла усложняется, т.к.SonarQubeВстроенные внутренние зависимостиElasticSearchсделать поиск вLinuxСистеме необходимо добавить не-rootпользователя и изменить некоторые системные параметры, такие как максимальное количество открытых файлов, поддерживаемых системой, и так далее. также,SonarQubeЯвляетсяJavaприложение, необходимо установить локальноJDK.посколькуSonarQubeиз7.9версия начинает отказываться от поддержкиMySQLбаза данных,8.3.1Версия поддерживает только режим памяти,PostgreSQL,Microsoft SQL Serverа такжеOracleЧетыре хранения двигателей. Автор исследовал, в режиме постоянства в трех базах данныхPostgreSQLустановка относительно проста. Установка на основе двоичных файлов подробно описана ниже.SonarQubeпроцесс обслуживания.
| Программная система) | Версия |
|---|---|
CentOS |
7.x |
OpenJDK |
11.x |
PostgreSQL |
12.x |
SonarQube |
8.3.1 |
Автор тестирует виртуальную машину (LANIPдля192.168.56.200) чтобы закрыть брандмауэр, если брандмауэр открыт, нужно открыть соответствующий номер порта.
Установите JDK11
OpenJDKУстановка относительно проста:
mdkir /data/openjdk
cd /data/openjdk
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
## 默认会解压到/data/openjdk/jdk-11文件夹
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
Если нет по умолчаниюJDK, который можно добавить к/etc/profileсередина:
vim /etc/profile
## /etc/profile文件中添加下面的内容
export JAVA_HOME=/data/openjdk/jdk-11
export PATH=$JAVA_HOME/bin:$PATH
## 刷新环境变量
source /etc/profile
есть тест:
[root@localhost jdk-11]# java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Установите базу данных PostgreSQL.
PostgreSQLУстановка также относительно проста, а в официальной документации есть очень подробные шаги:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12
yum install -y postgresql12-server
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
Исправлять/var/lib/pgsql/12/data/pg_hba.confнастроить, открыть всеHostДоступ:
затем перезагрузитеPostgreSQL:
systemctl restart postgresql-12
переключить пользователя вPostgreSQLкомандную строку и добавить нового пользователя базы данныхsonarи новая база данныхsonarзапасной:
su postgres
psql -U postgres
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar WITH OWNER sonar ENCODING 'UTF8'
Это создает имя, называемоеsonar, имя пользователяsonarи пароль тожеsonarбаза данных.
Установить сервис SonarquBE
во время установкиSonarQubeПеред подачей вы можете обратиться кPrerequisites and OverviewНастройте системные параметры, большинство из которых на самом деле такие же, какElasticSearchДля связанных параметров просмотра:
## 一个进程可以拥有的VMA(虚拟内存区域)的数量上限
sysctl vm.max_map_count
## 同时打开的文件数目上限
sysctl fs.file-max
## 可以打开的文件描述符的上限
ulimit -n
## 可以启动线程的数量上限
ulimit -u
Если текущий сеансroot
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
/etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536
/etc/security/limits.conf/etc/sysctl.conf
sonarqubeElasticSearchroot
adduser sonarqube
# 这一步需要输入密码,这里密码也暂定sonarqube
passwd sonarqube
# 分配权限
chown -R sonarqube:sonarqube /data/sonarqube
SonarQube
mdkir /data/sonarqube
cd /data/sonarqube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.1.34397.zip
uzip sonarqube-8.3.1.34397.zip
/data/sonarqube/sonarqube-8.3.1.34397/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
SonarQube
cd /data/sonarqube/sonarqube-8.3.1.34397/bin/linux-x86-64
./sonar.sh console
Ctrl C./sonar.sh startSonarQube
-
rootElasticSearchroot SonarQube-
vm.max_map_countfs.file-maxulimit -nulimit -u
http://192.168.56.200:9000SonarQubeWebUIChinese Pack
SonarQubeSonarScannerMavenMavensettings.xml
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
<!-- 这个位置需要替换成SonarQube服务地址,例如http://192.168.56.200:9000 -->
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
Mavensonar-maven-plugin
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
# 不指定插件版本执行
mvn clean install
mvn sonar:sonar
# 或者指定插件版本执行
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:${插件的版本号}:sonar
pom<properties>SonarQube
<properties>
<sonar.host.url>[...]</sonar.host.url>
<ssonar.projectKey>[...]</sonar.projectKey>
<sonar.projectName>[...]</sonar.projectName>
<sonar.projectVersion>[...]</sonar.projectVersion>
<sonar.login>[...]</sonar.login>
<sonar.password>[...]</sonar.password>
<sonar.sourceEncoding>[...]</sonar.sourceEncoding>
......
</properties>
http://192.168.56.200:9000/projects
DevOpsважная частьSonarQubeЭто очень хорошая открытая платформа для управления качеством кода.Автор ранее переносил сервисы в облако, и конфигурацию пайплайна в облаке можно внедрить в виде плагиновSonarQubeобслуживание, которое имеет эффект низкой стоимости и высокой прибыли.
Использованная литература:
личный блог
(Конец этой статьи c-1-d e-a-20200517)
Технический публичный аккаунт ("Throwable Digest"), который время от времени выкладывает оригинальные технические статьи автора (никогда не занимайтесь плагиатом и не перепечатывайте):