Toggle navigation
主页
English
K8S
Golang
Guitar
About Me
归档
标签
Welcome to Sanger's Blog!
Sonar概述
无
2023-02-22 15:27:13
8
0
0
sanger
[TOC] # 1. sonar是什么 > sonar官网地址: https://www.sonarqube.org sonar是一个代码质量管理的开源平台,用于管理源代码的质量,通过插件形式,可以支持包括java、C#、JavaScript、go等二十余种编程语言的代码质量管理与检测。  # 2. 七个维度检测代码质量 1. 不遵循代码标准sonar可以通过PMD,CheckStyle,Findbugs等代码规则检测工具规范代码编写。 2. 潜在的缺陷sonar可以通过PMD,CheckStyle,Findbugs等代码规则检测工具检测出潜在的缺陷。 3. 糟糕的复杂度分布文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。 4. 重复显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。 5. 注释不足或者过多没有注释将使代码可读性变差,特别是当不可避免出现人员变动时,程序的可读性大幅度下降,而过多的注释又会使得开发人员将精力过多的花费在阅读注释上,亦违背初衷。 6. 缺乏单元测试sonar可以很方便地统计并展示单元测试覆盖率。 7. 糟糕的设计通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则,可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测耦合。 # 3. 安装sonarqube > 本文将使用docker方式安装,SONAR_VERSION=8.2.0.32929 ## 3.1 修改 vm.max_map_count This file contains the maximum number of memory map areas a process may have. Memory map areas are used as a side-effect of calling malloc, directly by mmap and mprotect, and also when loading shared libraries. While most applications need less than a thousand maps, certain programs, particularly malloc debuggers, may consume lots of them, e.g., up to one or two maps per allocation. The default value is 65536. **max_map_count** 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。如果你的操作系统在NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。 ``` sysctl -w vm.max_map_count=262144 或者 echo vm.max_map_count=262144 >> /etc/sysctl.conf sysctl -p ``` ## 3.2 拷贝sonar目录并配置权限 ``` docker run -d --name sonarqube sonarqube docker cp sonarqube:/opt/sonarqube data/ chmod 777 -R data/sonarqube ``` cat prepare.sh ``` docker run -d --name sonarqube --restart=always -p 9000:9000 -p 9092:9092 -e TZ=Asia/Shanghai registry.cn-hangzhou.aliyuncs.com/mzcommon/sonarqube && \ mkdir -p `pwd`/data/sonarqube && \ docker cp sonarqube:/opt/sonarqube `pwd`/data/ && \ docker rm -f sonarqube && \ chmod 777 -R data/sonarqube && \ docker-compose up -d ``` ## 3.3 通过docker-compose.yaml启动 >建议在外部搭建一个公共的postgresql实例 ``` version: "3" services: sonarqube: image: sanger/sonarqube restart: always expose: - 9001 ports: - "9001:9000" networks: - sonarnet environment: - TZ=Asia/Shanghai - SONARQUBE_JDBC_URL=jdbc:postgresql://postgre.xxx.com/sonar - SONARQUBE_JDBC_USERNAME=sonar - SONARQUBE_JDBC_PASSWORD=sonar123 volumes: - ./data/sonarqube:/opt/sonarqube # db: # # image: postgres # # restart: always # # networks: # # - sonarnet # # environment: # # - POSTGRES_USER=sonar # # - POSTGRES_PASSWORD=sonar # # volumes: # # - /opt/sonarqube/data/postgresql:/var/lib/postgresql # networks: sonarnet: ``` ## 3.4 中文版 下载地址: https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases ``` cd ./data/sonarqube/extensions/plugins wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-8.2/sonar-l10n-zh-plugin-8.2.jar docker restart sonarqube_sonarqube_1 ``` 执行上面命令后,重新刷新页面 ## 3.5 sonar使用,集成drone之创建令牌 通过 我的帐号->安全->生成令牌 sonar_admin_token: xxx sonarqube安装后,默认管理用户名:admin 密码:admin # 4. sonar登录 sonar登录地址: http://sonar.xxx.com > 此帐号权限只能执行分析 **帐号**:sonar **密码**:sonar123 **token**: xxxxxxxxxxb95f140f4e1f6e3f3a41c156224d56 `看代码审计情况不用登录也可以进`    # 5. drone集成sonar demo项目地址:http://gogs.xxx.com/sanger/go-example .drone.yaml 新增`代码审计`steps,具体如下 ``` kind: pipeline type: docker name: go-example workspace: base: /go path: src/github.com/test/baa-cicd steps: # go编译在dockerfile中做了,具体请了解 “Multi-stage builds” # 可参考 # https://blog.alexellis.io/mutli-stage-docker-builds/ # https://docs.docker.com/develop/develop-images/multistage-build/ - name: 代码审计 # 参考: http://plugins.drone.io/aosapps/drone-sonar-plugin/ image: sanger/drone-sonar-plugin settings: sonar_host: # from_secret: sonar_host http://sonar.xxx.com sonar_token: xxxxxxxxxxb95f140f4e1f6e3f3a41c156224d56 # from_secret: sonar_token # token加个密,安全些11 # ver: 1.0 # 代码版本,默认值为DRONE_BUILD_NUMBER。 # timeout: 20 # 默认值 60s # inclusions # 分析中要包括的文件路径模式的逗号分隔列表。设置后,分析中将仅包含与此处设置的路径匹配的文件。 sources: . # 包含源文件的目录的逗号分隔路径 level: DEBUG # 控制分析过程中产生的日志数量/级别。默认值 INFO。 showProfiling: true # 显示日志以查看分析器的时间花费。默认值 false - name: 构建镜像 #docker插件 image: plugins/docker # image: plugins/docker # volumes: # 挂载本地docker的sock到容器中,这个步骤需要用户是管理员权限,暂时未放开 # 本步骤如果是管理员权限,可以节省拉取golang镜像的时间,pipeline可节省时间大约1min左右时间,具体视机器性能而定 # - name: docker # path: /var/run/docker.sock settings: username: #引用自建的secret from_secret: repo_user password: from_secret: repo_pass insecure: true repo: reg.xxx.com/${DRONE_REPO} registry: reg.xxx.com tags: ${DRONE_BUILD_CREATED}v${DRONE_BUILD_NUMBER} - name: kubernetes部署 #kubectl插件 image: sanger/kubectl:v1.14.1 commands: - cp -r kube_config/.kube ~/.kube - sed -i "s@#Repo@${DRONE_REPO}@g" k8s_yaml/deployment.yaml - sed -i "s@#Reg@reg.xxx.com@g" k8s_yaml/deployment.yaml - sed -i "s/#Tag/${DRONE_BUILD_CREATED}v${DRONE_BUILD_NUMBER}/g" k8s_yaml/deployment.yaml - kubectl config use-context aliyun-dev - kubectl apply -f k8s_yaml/ - name: 钉钉通知 #钉钉插件 image: sanger/drone-dingtalk-message settings: token: from_secret: dingding #只要token不要URL type: markdown message_color: true # message_pic: true sha_link: true when: status: [failure, success] brach: [dev] node: env: dev #agent标识 # volumes: # - name: docker # host: # path: /var/run/docker.sock trigger: #触发器 branch: - dev #当分支为 dev 时触发 ``` # 6. go项目sonar配置 参考: https://docs.sonarqube.org/latest/analysis/languages/go/ demo项目中暂时没有用到`sonar-project.properties`,配置都写到sonra-scan中了,后续是否使用可根据实际情况来定 # 7. 对接ldap > 不需要ldap的管理账号,暂时没有用到组 参考:https://blog.csdn.net/qq_35868811/article/details/104790459 https://docs.sonarqube.org/latest/instance-administration/delegated-auth/ ``` sonar.security.realm=LDAP ldap.url=ldap://ldap.xxx.com:389 ldap.bindDn=cn=sync_user,dc=xxx,dc=com ldap.bindPassword=xxx ldap.user.baseDn=dc=xxx,dc=com ldap.user.request=(&(objectClass=inetOrgPerson)(uid={login})) ``` # 8 sonar迁移 1. sonar挂载目录迁移 2. 我是用docker部署的,所以镜像版本最好一致 3. 生成相应的目标库和账号,用navicat从源库导入数据到目标库 ``` # 1. 备份源库到sql pg_dump -h 192.168.1.xxx -U postgres -d sonar -f sonar.sql # 2. 创建和原来db一样的用户和库 psql -h 192.168.1.xxx -U postgres create user sonar with password 'sonar123'; create database sonar owner sonar; grant all privileges on database sonar to sonar; # 3. 恢复数据库 psql -h 192.168.1.xxx -U sonar -D sonar -f drone.sql ```
上一篇:
Sonar分支扫描
下一篇:
droneci数据库各表含义及应用
0
赞
8 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
文档导航