sonarqube代码审核

参考链接: https://blog.csdn.net/cyfblog/article/details/97535868

SonarQube简介

  • SonarQube是一个开源的平台,以执行与代码的静态分析,自动审查,可以检测在25+的编程语言如Java、C#、JavaScript、TypeScript、C/C++、COBOL等的代码缺陷和安全漏洞。

Sonar检测维度

Sonar可以从七个维度进行代码质量检测,我们可以根据不同维度的严重性然后根据我们的经验做出相应的代码优化。

  • 代码规范
    Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否符合代码规范;
  • 潜在的缺陷
    Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否有代码缺陷(比如空指针是否有判断、IO流是否有关闭等);
  • 糟糕的复杂度分布
    文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
  • 重复代码
    程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方
  • 注释的检测
    没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
  • 单元测试
    sonar可以很方便地统计并展示单元测试覆盖率
  • 糟糕的设计
    通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

docker搭建Sonar server:

使用postgresql数据库
  • 搭建postgresql
docker run -d -p 5432:5432 --name postgresql --restart=always -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar postgres
  • 重新构建sonar镜像,下载汉化包
FROM sonarqube
ADD sonar-l10n-zh-plugin-8.6.jar /opt/sonarqube/extensions/plugins/
启动Sonar server
docker run -d -p 9000:9000 --name sonar --link postgresql:postgresql --restart=always -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgresql:5432/sonar -e SONAR_JDBC_USERNAME=sonar -e SONAR_JDBC_PASSWORD=sonar sonarqube:zh_CN
  • sonar.jdbc.username=sonar #数据库配置,Name&&Passwd

  • sonar.jdbc.password=sonar

  • 解决报错

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 解決方法:
sudo  vim /etc/sysctl.conf 

#追加内容:
vm.max_map_count=655360
#执行:
sysctl -p
> vm.max_map_count = 655360
连接SonarQube

http://192.168.10.186:9000
登录:
USER:admin
Passwd:admin
首次登陆修改密码:××××××
在这里插入图片描述


sonarqube使用:

项目测试
[root@CentOS-7-Docker ~]# ls 
tests-project-java
从Docker镜像运行SonarScanner
#新建vim myproject.sh文件
vim myproject.sh

#!/bin/sh
#要使用SonarScanner Docker映像进行扫描,请使用以下命令:
docker run -d \
       --rm \
       -e SONAR_HOST_URL=http://192.168.10.186:9000 \  
       -e SONAR_LOGIN="a319b5f7f2143901a6db2c835dd5acbdde5dfc62" \
       -v /root/tests-project-java:/usr/src \
       sonarsource/sonar-scanner-cli \
       -Dsonar.projectKey=myproject \
       -Dsonar.sources=src \
       -Dsonar.language=java \
       -Dsonar.java.binaries=.
       
[root@CentOS-7-Docker ~]# ls 
tests-project-java  myproject.sh
  • 指令说明
  • docker 指令:
    -v /root/tests-project-java:/usr/src #将项目目录映射到插件动作路径以进行检测
    --e SONAR_HOST_URL #指定sonarqube地址
    -e SONAR_LOGIN #指定为用户生成的令牌
    在这里插入图片描述
  • scanner指令:
    sonarsource/sonar-scanner-cli #运行SonarScanner插件的镜像
    -Dsonar.projectKey #指定项目的Key 检测完成后可以以Key作为检测完成的项目的名称(必须指定且唯一)
    -Dsonar.sources #指定需要分析的源码的目录,多个目录用英文逗号隔开
    -Dsonar.sourceEncoding=UTF-8 #源代码的编码。默认为默认系统编码
检测完成

在这里插入图片描述


docker compose参考:

version: '3'

services:
  db:
    image: postgres:12
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - "./postgresql:/var/lib/postgresql"
    ports:
      - "5432:5432"
  sonarqube:
    image: sonarqube:8-community
    container_name: sonarqube
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - "./sonarqube/data:/opt/sonarqube/data"
      - "./sonarqube/extensions:/opt/sonarqube/extensions"
      - "./sonarqube/logs:/opt/sonarqube/logs"
      - "./sonarqube/temp:/opt/sonarqube/temp"
    ports:
      - "9000:9000"
  • 安装汉化插件
    在这里插入图片描述

gitlab-runner配置

  • 新建一个runner用来运行.gitlab-ci.yml
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://192.168.10.186    #gitlab地址
Please enter the gitlab-ci token for this runner:
XYJzuykzsBCtKTxpF6KQ    #项目runner令牌
Please enter the gitlab-ci description for this runner:
[9160067e9705]:sonar-scanner   #runner描述
Please enter the gitlab-ci tags for this runner (comma separated):
sonar-200   #标签
Registering runner... succeeded                     runner=XYJzuykz
Please enter the executor: docker-ssh+machine, kubernetes, shell, virtualbox, docker+machine, parallels, ssh, custom, docker, docker-ssh:
docker   #指定用来执行的命令
Please enter the default Docker image (e.g. ruby:2.6):
sonarsource/sonar-scanner-cli   #指定可执行的镜像
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
  • .gitlab-ci.yml
stages:
  - sonar
  - build
  - deploy

cache:
  paths:
    - node_modules/

variables:
  PORT: "7090"
  PREPRED_DOMAIN: "twww"
  PRED_DOMAIN: "dwww"
  PROD_DOMAIN: "www"
  KUBECONFIG: /etc/deploy/config
  LAN_REPO: registry-vpc.cn-beijing.aliyuncs.com
  WAN_REPO: registry.cn-beijing.aliyuncs.com
  DEV_REPO:  qianjia_dev
  PRED_REPO: qianjia_pred
  PROD_REPO: qianjia_prod
  SONAR_HOST_URL: "http://192.168.10.186:9000"

#代码检测
sonar_check_job:
  image: registry.cn-beijing.aliyuncs.com/qianjia2018/qianjia_public/sonar-scanner:4.5
  stage: sonar
  before_script:
    - CONTAINER_NAME=`echo $CI_PROJECT_NAME | tr 'A-Z' 'a-z'| tr '_' '-'`
  script:
    - sonar-scanner -Dsonar.login=admin -Dsonar.password=admin -Dsonar.projectName=$CONTAINER_NAME  -Dsonar.projectKey=$CONTAINER_NAME -Dsonar.projectVersion=1.0 -Dsonar.sources=. -Dsonar.language=js -Dsonar.java.binaries=.
  allow_failure: true
  tags: 
    - sonar-scanner
  only:
    - dev
    
#项目构建
build_push_image_dev_job:
  image: registry-vpc.cn-beijing.aliyuncs.com/qianjia2018/qianjia_public:mvn-docker-kube
  stage: build
  before_script:
    - docker login --username=$USERNAME --password=$PASSWORD registry-vpc.cn-beijing.aliyuncs.com
    - CONTAINER_NAME=`echo $CI_PROJECT_NAME | tr 'A-Z' 'a-z'| tr '_' '-'`
    - TAG=`expr substr $CI_COMMIT_SHA 1 8`
  script:
    - docker build -t $LAN_REPO/$DEV_REPO/$CONTAINER_NAME:$TAG -f Dockerfile-dev .
    - docker push $LAN_REPO/$DEV_REPO/$CONTAINER_NAME:$TAG
  tags:
    - k8s
  only:
    - dev
  when: on_success

#项目部署
deploy_to_dev_job:
  stage: deploy
  before_script:
    - CONTAINER_NAME=`echo $CI_PROJECT_NAME | tr 'A-Z' 'a-z'| tr '_' '-'`
    - TAG=`expr substr $CI_COMMIT_SHA 1 8`
  script:
    - bash ~/.local/bin/f200.sh  $CONTAINER_NAME  $PORT  80  $WAN_REPO/$DEV_REPO/$CONTAINER_NAME:$TAG  guojia  192.168.10.200
  tags:
    - ssh-deploy
  only:
    - dev
  when: on_success
  • 代码检测脚本说明:
    -Dsonar.host.url=http://192.168.10.186:9000 #sonar 要用的 ip 和端口
    -Dsonar.sourceEncoding=UTF-8 #源代码编码
    -Dsonar.login=admin #登录用户名及密码
    -Dsonar.password=admin
    -Dsonar.projectKey= #指定项目的Key 检测完成后可以以Key作为检测完成的项目的名称(必须指定且唯一)
    -Dsonar.sources #指定需要分析的源码的文件位置,多个目录用英文逗号隔开
    -Dsonar.language=js #语言
    -Dsonar.projectVersion=1.0 #项目版本
    -Dsonar.java.binaries=. #target
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值