前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins+SonarQube代码审查

Jenkins+SonarQube代码审查

作者头像
大忽悠爱学习
发布2022-09-26 19:12:37
1.1K0
发布2022-09-26 19:12:37
举报
文章被收录于专栏:c++与qt学习c++与qt学习

Jenkins+SonarQube代码审查


引言

  • SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持Java、C#、C++、Python、PL/SQL、Cobol、JavaScript、Groovy等二十几种编程语言的代码质量管理和检测。
  • 官网
  • 环境要求:

软件

服务器

版本

JDK

192.168.18.101

11

PostgreSQL

192.168.18.101

5.7

SonarQube

192.168.18.101

8.6.0


安装PostgreSQL

  • Docker安装:
代码语言:javascript
复制
# 用户名是 postgres  ,密码是123456
docker run --name postgres -v dv_pgdata:/var/lib/postgresql/data --restart=always -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:12.1

安装SonarQube

  • 在PostgreSQL中新建sonar数据库:
代码语言:javascript
复制
CREATE DATABASE sonar;
  • 下载SonarQube
代码语言:javascript
复制
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.6.0.39681.zip
  • 解压sonar:
代码语言:javascript
复制
unzip -d /usr/local/ sonarqube-8.6.0.39681.zip
代码语言:javascript
复制
cd /usr/local
代码语言:javascript
复制
mv sonarqube-8.6.0.39681 sonarqube-8.6.0
  • 创建用户,用于设置权限:
代码语言:javascript
复制
# 创建sonar用户,sonar不能用root启动,否则报错
useradd sonar
代码语言:javascript
复制
passwd sonar
代码语言:javascript
复制
chown -R sonar /usr/local/sonarqube-8.6.0
  • 修改sonar的配置文件:
代码语言:javascript
复制
vim /usr/local/sonarqube-8.6.0/conf/sonar.properties
代码语言:javascript
复制
# 内容如下
sonar.jdbc.username=postgres 
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
  • sonar默认自带了ES,所以需要修改配置,防止启动报错:
代码语言:javascript
复制
vim /etc/security/limits.conf
代码语言:javascript
复制
# 追加内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
代码语言:javascript
复制
vim /etc/security/limits.d/90-nproc.conf
代码语言:javascript
复制
# 追加内容
* soft nproc 4096
代码语言:javascript
复制
vim /etc/sysctl.conf
代码语言:javascript
复制
# 追加内容
vm.max_map_count=655360
代码语言:javascript
复制
sysctl -p
代码语言:javascript
复制
reboot

  • 启动sonar(sonar的默认端口是9000):
代码语言:javascript
复制
cd /usr/local/sonarqube-8.6.0/
代码语言:javascript
复制
# 启动
su sonar ./bin/linux-x86-64/sonar.sh start
代码语言:javascript
复制
# 查看状态
su sonar ./bin/linux-x86-64/sonar.sh status
代码语言:javascript
复制
# 停止
su sonar ./bin/linux-x86-64/sonar.sh stop
代码语言:javascript
复制
# 查看日志
tail -f logs/sonarxxx.logs
  • 访问sonar:http://192.168.18.101:9000。
在这里插入图片描述
在这里插入图片描述
  • 修改sonar的默认密码:
在这里插入图片描述
在这里插入图片描述
  • 安装中文插件:
在这里插入图片描述
在这里插入图片描述

如果出现“Error while downloading plugin ‘l10nzhtw’ with version ‘1.0’. No compatible plugin found.”错误,那说明版本不兼容,可到官网查找对应版本的插件放到…/…/extensions/plugins目录下,重新启动sonar服务【使用命令…/…/sonar.sh start 也可以通过页面操作“配置->系统->重启服务器”】,即可生效。但如果安装的插件比当前版本低的话,会出现部分显示还是英文。

代码语言:javascript
复制
cd /usr/local/sonarqube-8.6.0/extensions/plugins

  • 生成令牌(需要将生成的令牌复制下来):
在这里插入图片描述
在这里插入图片描述

实现代码审查

概述

在这里插入图片描述
在这里插入图片描述

Jenkins安装SonarQube Scanner插件

安装SonarQube Scanner

● 安装SonarQube Scanner有两种方式:

○ 在Linux所在的服务器上直接安装。

○ 通过Jenkins帮我们自动安装(本人选择这种)。

● Manage Jenkins–>Global Tool Configuration。

在这里插入图片描述
在这里插入图片描述

Jenkins配置Sonar Server

  • Manage Jenkins->Configure System->SonarQube servers:
在这里插入图片描述
在这里插入图片描述

非流水线项目添加SonarQube代码审查

  • 添加构建步骤:
在这里插入图片描述
在这里插入图片描述
  • 配置如下:
代码语言:javascript
复制
# must be unique in a given SonarQube instance
sonar.projectKey=springboot2
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 8.6.0
sonar.projectName=springboot2
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=11
sonar.java.target=11
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.java.binaries=**target/classes

流水线项目添加SonarQube代码审查

  • 在项目的根目录中添加sonar-project.properties文件,内容如下:
代码语言:javascript
复制
# must be unique in a given SonarQube instance
sonar.projectKey=springboot2
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 8.6.0
sonar.projectName=springboot2
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=11
sonar.java.target=11
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.java.binaries=**target/classes
在这里插入图片描述
在这里插入图片描述
  • Jenkinsfile:
代码语言:javascript
复制
pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7d5c4945-2533-41e2-bd47-5dd97eb37f38', url: 'git@192.168.18.100:develop_group/springboot2.git']]])
            }
        }
		stage('编译打包') {
            steps {
                sh '''echo "开始构建"
                mvn clean install -Dmaven.test.skip=true
                echo "构建结束"'''
            }
        }
        stage('代码检查') {
            steps {
                script {
                   // 引入SonarQubeScanner工具
                   scannerHome = tool 'sonarqube-scanner'
                }
                // 引入了 SonarQube服务器的环境
                withSonarQubeEnv('sonarqube-8.6.0') {
                   sh "${scannerHome}/bin/sonar-scanner"
                }
            }
        }
		stage('远程部署') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.18.102', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /usr/local
chmod 777 *.sh
./stop.sh
./start.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }

    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jenkins+SonarQube代码审查
  • 引言
    • 安装PostgreSQL
      • 安装SonarQube
      • 实现代码审查
        • 概述
          • Jenkins安装SonarQube Scanner插件
            • 安装SonarQube Scanner
              • Jenkins配置Sonar Server
                • 非流水线项目添加SonarQube代码审查
                  • 流水线项目添加SonarQube代码审查
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档