持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描

2023-12-07 20:20

本文主要是介绍持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、实验

1.GitLabCI 代码扫描

二、问题

1.GitLab 执行sonar-scanner命令报错


 

 

 

 

一、实验

1.GitLabCI 代码扫描

(1)打开maven项目

7fc07572527043dfbfbb1df7eb0b2872.png

(2)maven项目流水线调用公共库

bb032fef982644ef87c6091b8abdba49.png

(3)项目组添加token认证

343de6f3d2634744b3e75adac69650e5.png

(4)修改公共库流水线文件

93dc354c61a841e6b0f3f2957165a35f.png

(5)修改CI.yaml

.pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: "true"script:- ls -l.cibuild:tags:- buildstage: buildscript:- echo "${BUILD_SHELL}"- ${BUILD_SHELL}artifacts:paths:- ${ARTIFACT_PATH}.citest:tags:- buildstage: testscript:- echo "${TEST_SHELL}"- ${TEST_SHELL}# artifacts:# reports:#   - junit: ${TEST_REPORTS}.sonarscan:tags: - buildstage: sonarscanscript: |-sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \-Dsonar.projectKey=${CI_PROJECT_NAME}\-Dsonar.projectName=${CI_PROJECT_NAME} \-Dsonar.projectVersion=${CI_COMMIT_SHA} \-Dsonar.login=${SONAR_AUTH_TOKEN} \-Dsonar.ws.timeout=30 \-Dsonar.projectDescription=${CI_PROJECT_TITLE} \-Dsonar.links.homepage=${CI_PROJECT_URL} \-Dsonar.links.ci=${CI_PIPELINE_URL} \-Dsonar.sources=src \-Dsonar.sourceEncoding=UTF-8 \-Dsonar.java.binaries=target/classes \-Dsonar.java.test.binaries=target/test-classes \-Dsonar.java.surefire.report=target/surefire-reports \-Dsonar.core.codeCoveragePlugin=jacoco \-Dsonar.jacoco.reportPaths=target/jacoco.exec

371d7ce032a5435f99f682846e8831fe.png

(6) 修改gitlab-ci.yaml,添加代码扫描阶段sonarscan

include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永远不执行- if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情况永远执行- when: always#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:GIT_CHECKOUT: "false"BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令ARTIFACT_PATH: "target/*.jar"                                  ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告stages:- build- test- sonarscanpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscan

d3c6154499bd408ca5faa1f94cd0525f.png

(6)maven项目运行流水线

775df0def06d41d497acd85949b20e9e.png

(7)成功

cc3438aa06c643f78dcf213cdbd5cbf7.png25099d49d6d54885b69868b0c27c32c3.png

(8)查看日志

0b72ce1b917b4851a69a02291398a3bd.png

(9)sonarqube查看项目

fb6732c864224007b9ed7b15ea795a89.pngf6b40884aa7c4a57bafb66b311d0ffed.png

 

二、问题

1.GitLab 执行sonar-scanner命令报错

(1)报错

报错1:命令未找到

9e7a84e5d7a1467284a68b49de156f8b.png

报错2:符号连接的层数过多

c6ce48d637fb493b87c64c0cbf14d7a8.png

(2)原因分析

问题1:环境变量未声明

问题2:bin目录软链接过多

(3)解决方法

第一种方式:删除软链接

第二种方式:重新安装sonar-scanner插件

这里采用第二种方式。

#下载地址
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2856-linux.zip#解压在 opt 目录
cd /opt
unzip sonar-scanner-cli-4.8.0.2856-linux.zip #修改配置文件
cd /opt/sonar-scanner-4.8.0.2856-linux/conf
vim sonar-scanner.propertiessonar.host.url=http://192.168.204.8:9000
sonar.sourceEncoding=UTF-8#在 /etc/profile 的末尾添加环境变量
vim /etc/profileexport SONAR_SCANNER_HOME=/opt/sonar-scanner-4.8.0.2856-linux
export PATH=$SONAR_SCANNER_HOME/bin:$PATH#环境变量立即生效
source /etc/profile#检查一下命令是否可用
sonar-scanner -v

ba8164f0acf44b6f9514fa042521696d.png

 

这篇关于持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/467240

相关文章

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买