sonarqube 是一个代码质量管理平台,可通过安装不同的插件集成测试工具、代码质量分析工具、持续集成等多种功能。
sonarqube 目前最新版为 8.0,最新稳定版本为 7.9,由于性能原因,sonar 从 7.9 之后就不再 支持 MySQL,替代方案为 PostgreSQL。
这里选择 postgres:12
和 sonarqube:7.9-community
两个 docker 镜像,使用 docker-compose 配置并启动
编写 docker-compose.yaml 文件
$ mkdir sonar $ cat << 'EOF' | tee sonar/docker-compose.yaml version: "3" services: postgres: image: postgres:12 container_name: postgres restart: always networks: - sonar volumes: - "/etc/localtime:/etc/localtime" # 持久化存储postgresql数据 - "/data/postgresql:/var/lib/postgresql/data" environment: # 创建sonarqube所需数据库并授权 - "POSTGRES_USER=sonar" - "POSTGRES_PASSWORD=sonar" - "POSTGRES_DB=sonar" sonar: image: sonarqube:7.9-community container_name: sonar restart: always depends_on: - postgres networks: - sonar volumes: - "/etc/localtime:/etc/localtime" # 持久化存储sonarqube插件,日志,数据,配置 - "/data/sonarqube/extensions:/opt/sonarqube/extensions" - "/data/sonarqube/logs:/opt/sonarqube/logs" - "/data/sonarqube/data:/opt/sonarqube/data" - "/data/sonarqube/conf:/opt/sonarqube/conf" environment: # sonarqube连接postgresql配置 - "SONARQUBE_JDBC_USERNAME=sonar" - "SONARQUBE_JDBC_PASSWORD=sonar" - "SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar" labels: - "traefik.enable=true" # HTTP访问入口,HTTP自动跳转HTTPS - "traefik.http.routers.sonar.entrypoints=web" - "traefik.http.routers.sonar.rule=Host(`sonar.YOU_DOMAIN`)" - "traefik.http.routers.sonar.middlewares=redirect-to-https" - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # HTTPS访问入口 - "traefik.http.routers.sonar-secure.entrypoints=websecure" - "traefik.http.routers.sonar-secure.rule=Host(`sonar.YOU_DOMAIN`)" # 开启TLS - "traefik.http.routers.sonar-secure.tls=true" - "traefik.http.routers.sonar-secure.tls.certresolver=default" # 指定SonarQube的端口,多端口容器需要指定 - "traefik.http.services.sonar-secure.loadbalancer.server.port=9000" traefik: image: traefik:2.1 container_name: traefik restart: always command: # 开启api/dashboard - "--api.dashboard=true" # 设置provider为docker - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" # 设置http和https入口点 - "--entryPoints.web.address=:80" - "--entryPoints.websecure.address=:443" # ACME验证方式,这里选择TLS验证 - "--certificatesresolvers.default.acme.tlschallenge=true" # 申请证书的邮箱 - "--certificatesResolvers.default.acme.email=YOU_EMAIL" # 保存ACME证书的位置 - "--certificatesResolvers.default.acme.storage=/letsencrypt/acme.json" networks: - sonar ports: - "80:80" - "443:443" volumes: - "/etc/localtime:/etc/localtime" - "./letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock" networks: sonar: driver: bridge EOF
把上面的 YOU_DOMAIN 和 YOU_EMAIL 换成实际的域名和邮箱
1. 创建持久化 postgresql 和 sonarqube 数据目录
mkdir -pv /data/{postgresql,sonarqube/{conf,data,extensions,logs}}
postgresql 和 sonarqube 镜像都是以 UID 999 的用户启动运行的,需要将持久化数据目录权限更改
chown -R 999.root /data/{postgresql,sonarqube}
2. sonarqube 里集成了 elasticsearch,由于 elasticsearch 占用内存较高,官方要求 vm.max_map_count
需要配置到最小 262144
$ echo "vm.max_map_count = 262144" > /etc/sysctl.d/sonarqube.conf
$ sysctl -p /etc/sysctl.d/sonarqube.conf
3. 启动 SonarQube
$ cd sonar $ docker-compose up -d
4.等待一段时间后,在浏览器里输入 sonar.YOU_DOMAIN,即可看到 sonarqube 的 web 页面
默认登录账号密码为 admin/admin
5.按照下图的点击顺序,进入插件安装页面
6.搜索chinese Pack,安装中文语言包
7.安装成功后,重启sonarqube服务,再次访问http://localhost:9000/,即可看到中文界面
8.右上角创建新项目 test ,项目标识是项目的唯一标识,后面sonar-scanner配置文件会用到
9. 生成令牌,后面sonar-scanner配置文件会用到
安装 Sonar Scanner
官方教程:SonarScanner | SonarQube Docs
可以下载windows版本或者linux版本的
比如我自己下载的windows版本:
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-windows.zip
修改配置文件:conf/sonar-project.properties
# must be unique in a given SonarQube instance 创建项目时设置的项目标识 sonar.projectKey=test # defaults to project key #sonar.projectName=My project # defaults to 'not provided' #sonar.projectVersion=1.0 # sources是源文件所在的目录 Defaults to . #sonar.sources=. #----- Default SonarQube server #sonar.host.url=http://localhost:9000 sonar.host.url=https://sonar.phpmianshi.com #----- Default source code encoding sonar.sourceEncoding=UTF-8
配置完成后验证是否配置成功
sonar-scanner -h usage: sonar-scanner [options] Options: -D,--defineDefine property -h,--help Display help information -v,--version Display version information -X,--debug Produce execution debug output
在cmd进入项目所在的根目录,输入命令
sonar-scanner -Dsonar.login=myAuthenticationToken
令牌的生成参考:配置篇=>9. 生成令牌,后面sonar-scanner配置文件会用到
也可以参考官网:Generating and Using Tokens | SonarQube Docs
打开https://sonar.phpmianshi.com,我们会看到主页出现了分析项目的概要图
预知更多使用,请登录官网自行学习。
Code Quality and Code Security | SonarQube
http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner