【Docker实战】Jenkins与SonarQube集成部署,自动化代码质量监控

举报
wzsのcloud 发表于 2024/10/29 22:32:35 2024/10/29
【摘要】 "强化代码质量,加速软件交付!Jenkins携手SonarQube,与华为云Flexus X云服务器强强联合,打造自动化代码质量监控新生态。Flexus X以其灵活的算力配置、卓越的性能表现,为Jenkins与SonarQube的集成部署提供强大支撑。

前言

强化代码质量,加速软件交付!Jenkins携手SonarQube,与华为云Flexus X云服务器强强联合,打造自动化代码质量监控新生态。Flexus X以其灵活的算力配置、卓越的性能表现,为Jenkins与SonarQube的集成部署提供强大支撑。在Flexus X的助力下,自动化代码扫描与质量问题即时反馈成为可能,显著提升团队开发效率与软件质量。
链接直达:华为云Flexus云服务器X实例

image.png

SonarQube介绍

SonarQube是一款用于代码质量管理的开源工具,它采用B/S架构,主要用于管理源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题, 并通过SonarQube web UI展示出来。

image.png

环境规划

操作系统 Jenkins Sonar Qube Maven docker docker-compose 连接方式
Huawei Cloud EulerOS 2.0 jenkins/jenkins sonarqube:8.9.3-community 3.9.9 27.1.1 2.29.1 本地==shell==

Sonar Qube环境搭建

需要了解:

Sonar Qube的安装

Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。

并且这里会安装Sonar Qube的长期支持版本8.9

拉取镜像

[root@flexusx-251f ~]# docker pull postgres
[root@flexusx-251f ~]# docker pull sonarqube:8.9.3-community

# 创建目录
[root@flexusx-251f ~]# mkdir /sonarqube
[root@flexusx-251f ~]# cd /sonarqube/

编写docker-compose.yaml文件

version: "2.29.1"
services:
  db:
    image: postgres                       # 指定镜像
    container_name: postgres_db           # 指定容器名称
    ports:
      - 5432:5432                         # 映射端口到宿主机,以从外部访问数据库
    networks:
      - sonarnet                          # 连接到sonarnet网络
    environment:
      POSTGRES_USER: sonar                # 创建数据库
      POSTGRES_PASSWORD: sonar            # 数据库密码
  sonarqube:
    image: sonarqube:8.9.3-community      # 指定镜像
    container_name: sonarqube             # 指定容器名称
    depends_on: 
      - db                                # 指定服务
    ports: 
      - "9000:9000"                       # 映射端口到宿主机,以便可以从外部访问SonarQube。
    networks:
      - sonarnet                         # 连接到sonarnet网络
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge                      # 创建桥接网络

配置sysctl.conf文件信息。设置vm.max_map_count

[root@flexusx-251f sonarqube]# vim /etc/sysctl.conf

# 在最后添加一行 vm.max_map_count
[root@flexusx-251f sonarqube]# cat  /etc/sysctl.conf
...
vm.max_map_count=262144

# 刷新
[root@flexusx-251f sonarqube]# sysctl -p
vm.swappiness = 0
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 1024
vm.max_map_count = 262144

启动容器

[root@flexusx-251f sonarqube]# docker-compose up -d
WARN[0000] /sonarqube/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 3/3
 ✔ Network sonarqube_sonarnet  Created                                            0.0s
 ✔ Container postgres_db       Started                                            0.2s
 ✔ Container sonarqube         Started                                            0.3s

[root@flexusx-251f sonarqube]# docker-compose ls
NAME                STATUS              CONFIG FILES
sonarqube           running(2)          /sonarqube/docker-compose.yaml

访问Sonar Qube首页

放行安全组9000,5432

image.png

访问地址:http://主机ip:9000

image.png

登录用户名和密码均为admin

image.png

登录成功进行密码修改

image.png

进入 Sonar Qube 首页

image.png

安装中文插件

我同意风险,并点击安装

image.png

安装成功后,会查看到重启按钮,点击即可

image.png

Jenkins集成Sonar Qube

Jenkins继承Sonar Qube实现代码扫描需要先下载整合插件

Jenkins安装插件

下载Sonar Qube插件

image.png

image.png

安装成功

image.png

Sonar-scanner实现代码检测

下载Sonar-scanner:https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/

下载4.6.x版本即可,要求Linux版本

我们直接在/Jenkins/data目录进行安装,因为我们将主机的/jenkins/data目录挂在给了容器的/var/jenkins_home/目录

[root@flexusx-251f ~]# mkdir /jenkins/data/sonar-scanner

[root@flexusx-251f ~]# cd /jenkins/data/sonar-scanner

# 上传软件包
[root@flexusx-251f sonar-scanner]# ls
sonar-scanner-cli-4.6.2.2472-linux.zip

解压软件包

[root@flexusx-251f sonar-scanner]# unzip sonar-scanner-cli-4.6.2.2472-linux.zip

配置sonarQube服务端地址,修改conf下的sonar-scanner.properties

[root@flexusx-251f sonar-scanner]# ls
sonar-scanner-4.6.2.2472-linux  sonar-scanner-cli-4.6.2.2472-linux.zip
[root@flexusx-251f sonar-scanner]# cd sonar-scanner-4.6.2.2472-linux/
[root@flexusx-251f sonar-scanner-4.6.2.2472-linux]# ls
bin  conf  jre  lib
[root@flexusx-251f sonar-scanner-4.6.2.2472-linux]# cd conf/
[root@flexusx-251f conf]# ls
sonar-scanner.properties
[root@flexusx-251f conf]# vim sonar-scanner.properties
[root@flexusx-251f conf]# cat sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
#sonar.host.url=http://localhost:9000
sonar.host.url=http://123.249.27.118:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
sonar.sourceEncoding=UTF-8

执行命令检测代码(如果设置了令牌需要指定才能成功 -Dsonar.login=toekn值)

# 去到项目目录下
[root@flexusx-251f target]# cd /jenkins/data/workspace/test01/target

# 在主机进行指定sonar-scanner运行
[root@flexusx-251f target]# /jenkins/data/sonar-scanner/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=test01 -Dsonar.projectKey=java -Dsonar.java.binaries=target/ 
INFO: Scanner configuration file: /jenkins/data/sonar-scanner/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.2.2472
....................................
INFO: ANALYSIS SUCCESSFUL, you can browse http://123.249.27.118:9000/dashboard?id=java
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://123.249.27.118:9000/api/ce/task?id=AZHAblB5Qhli4mfRayPT
INFO: Analysis total time: 2.408 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 14.564s
INFO: Final Memory: 7M/30M
INFO: ------------------------------------------------------------------------

查看SonarQube界面检测结果

image.png

Jenkins配置Sonar Qube

开启Sonar Qube权限验证

image.png

获取Sonar Qube令牌(填写一个名称,生成token)

5544214f876d9ef6737c0f2a731991d877adf380

image.png

配置Jenkins的Sonar Qube信息

image.png

image.png

image.png

image.png

配置Sonar-scanner

Sonar-scaner添加到Jenkins数据卷中并配置全局配置

image.png

image.png

配置任务的Sonar-scanner

sonar.projectname=${JOB_NAME}

sonar.projectKey=${JOB_NAME}

sonar.source=./

sonar.java.binaries=target

image.png

构建任务

image.png

构建成功

image.png

image.png

体验和感受

在追求高效开发与快速迭代的软件开发领域,代码质量是确保软件稳定性和可靠性的基石。华为云Flexus X实例,以其卓越的性能和稳定的云环境,为企业用户提供了强大的基础设施支持。结合Jenkins持续集成/持续部署(CI/CD)工具SonarQube代码质量管理平台,Flexusx更是为企业开启了自动化代码质量监控的新篇章。

Jenkins与SonarQube的集成部署,实现了代码提交后的自动构建、测试以及质量分析。每当有新的代码提交,Jenkins便会触发构建流程,并将构建结果传递给SonarQube进行深度代码质量检查。SonarQube能够识别潜在的代码缺陷、漏洞以及不规范的编码实践,并提供详细的报告和改进建议。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。