当前位置:首页 > 运维 > 正文内容

SonarQube的安装、配置与使用

phpmianshi3周前 (07-13)运维56

sonarqube 是一个代码质量管理平台,可通过安装不同的插件集成测试工具、代码质量分析工具、持续集成等多种功能。

sonarqube 目前最新版为 8.0,最新稳定版本为 7.9,由于性能原因,sonar 从 7.9 之后就不再 支持 MySQL,替代方案为 PostgreSQL。

这里选择 postgres:12sonarqube: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.按照下图的点击顺序,进入插件安装页面

image.png

6.搜索chinese Pack,安装中文语言包


7.安装成功后,重启sonarqube服务,再次访问http://localhost:9000/,即可看到中文界面


三、使用篇

1.打开要进行代码分析的项目根目录,新建sonar-project.properties文件

2.输入以下信息

复制代码
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=apiautocore
sonar.projectVersion=1.0
 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.# Since SonarQube 4.2, this property is optional if sonar.modules is set. 
# If not set, SonarQube starts looking for source code from the directory containing 
# the sonar-project.properties file.
sonar.sources=src
 
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
复制代码

其中:projectName是项目名字,sources是源文件所在的目录

3.设置成功后,启动sonarqube服务,并启动cmd

4.在cmd进入项目所在的根目录,输入命令:sonar-runner,分析成功后会出现下图

5.打开http://localhost:9000/,我们会看到主页出现了分析项目的概要图

6.我们点击项目,选择问题链接,会看到分析代码的bug,哇,好多

7.选择一个最严重的bug,看看

原来是这个地方会出现空指针异常,原因是我没有进行初始化就使用这个变量了。Over

预知更多使用,请登录官网自行学习。

http://www.sonarqube.org/

http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

快速删除复制代码中的行号

有时我们copy的代码中前面有行号,一个一个删除太麻烦可以用下面三种方式删除行号:1.awk操作 awk '{for(i=2;i<=NF;i++)printf(&qu...

linux中tee命令详解

linux中tee命令详解

介绍tee最基本的用法就是显示输出结果并且保存内容到文件中。下面例子使用free命令显示系统内存使用信息,并使用tee命令将信息输出到屏幕,并保存到文件mem.txt中。[root@localhost...

linux中磁盘被占用找不到占用文件

1、用df 检查发现磁盘占用过高[root@VM_0_15_centos ~]# df -h2、用du检查发现各目录占用的空间都很少,有约10G的空间找不到了[root@...

CSRF攻击与防御

 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    &nbs...

linux中df -i 100%解决方案

背景E138: Can't write viminfo file /root/.viminfo!Press ENTER or type command to continue这不科学呀,明明是...

进程间通信的方式

进程间通信的方式

1.管道    管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。    1.匿名管道:  ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。