当前位置: 首页 > news >正文

从一开始部署Android项目Sonarqube的自动化扫码+通知+增量扫描功能(Win环境、Docker,基于Jenkins)

文章目录

    • 环境和要求
    • 注意
    • 说明
  • 1. 总体逻辑链路
  • 2. gitea到jenkins:基于webhook的代码即时通知
    • 2.1 jenkins配置
    • 2.2 gitea配置
  • 3. 扫描完成后的通知功能:Email
      • 插件安装
      • 系统配置
      • 项目配置(Jenkinsfile)
  • 4. Jenkinsfile:从全量编译到增量编译
  • 5. 结尾
  • 参考资料

环境和要求

系统环境:win11
配置要求:能跑得动文中服务总和的内存
软件环境:Docker desktop。https://www.docker.com/products/docker-desktop/
网络环境:有办法上外网下载容器和所需要的服务。

注意

本文是从零开始部署Android项目的代码质量检测工具Sonarqube(Win环境、Docker,基于Jenkins)
的后续文章,也是docker项目构建的第三篇。

在开始阅读之前,需要你的环境实现以下内容:

  1. 已经自己部署了gitea,jenkins,sonarqube且三个容器以及对应的数据库容器,并且都已经正常运行。
  2. 已经配置好gitea和jenkins的关联,可以在jenkins中正常拉取gitea的代码。
  3. 已经配置好jenkins和sonarqube的关联,可以实现简单的代码全量扫描的功能;
  4. 项目内已经有一个Jenkinsfile用于实现全量扫描;同时jenkins已经部署一个sonarqube项目,成功进行过一次代码扫描。

说明

在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),下图红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。
在这里插入图片描述

1. 总体逻辑链路

想要实现增量编译功能,需要gitea,jenkins,sonarqube三个容器的通力配合。

  1. gitea负责给jenkins提供代码 ,特别是commit之间或者分支间的代码差异关系,毕竟增量编译需要有个代码基线。同时,我们还需要实现gitea在特定条件下的主动通知jenkins场景。
  2. jenkins负责链接代码仓库和sonarqube,实现扫描功能的构建和结果的通知。
  3. sonarqube是代码扫描专门的容器。

所以我们的文章流程如下:
4. 先实现gitea推送之后通知jenkins进行扫描的功能。
5. 再实现jenkins扫描完成之后主动通知用户的功能。
6. 最后再将全量编译的jenkinsfile改成增量编译的形式,完成整个链路的闭合。

2. gitea到jenkins:基于webhook的代码即时通知

2.1 jenkins配置

想要实现通知的功能,要先实现jenkins被通知的api。

打开jenkins网页,右上角用户头像,下方的安全(Security)。
在这里插入图片描述
在apitoken这一栏新增一个,名称可以自己定,然后把token复制下来,就是类似这样的格式。
1145262b37bbdddaa64ac2fc8dc6de4601

接下来进入我们之前设置好的sonarqube扫描项目,点击配置,在触发器这里勾选触发远程构建,然后里面的令牌随便填入一些内容即可。
在这里插入图片描述

配置保存之后,我们要先测试一下远程触发构建的功能是否可以正常运行。

先把我们的URL编辑好:

进入jenkins你的sonarqube项目中,把网页地址复制下来,大概是这样:
http://192.168.31.39:8080/job/sonarqube/
然后在//后面加上[你的用户名:你的apiToken@],地址的末尾加上[build?token=你的构建token]整体格式:
http://你的用户名:你的apiToken@你的jenkins容器的地址/job/jenkins项目名/build?token=你的构建token例:
http://root:110e96d74aadcb1c5e5c59764cf900d0@192.168.31.39:8080/job/sonarqube/build?token=my-token

在你的浏览器输入框直接输入这个地址(当然你有条件有postman也行),看一下能否触发jenkins的构建,能的话就算第一步成功。

2.2 gitea配置

当然这一步如果你是gitlab啥的其实也差不多的流程就是了。

进入到代码仓库,右上角的仓库设置,进入webhook(中文就是web钩子),类型选git就行。
在这里插入图片描述
在目标url中把我们刚刚的url复制进去,然后事件类型选择推送事件,其他的全都不需要改,直接保存即可。
在这里插入图片描述

接下来在你的项目本体随便推一点代码到gitea上去,能触发jenkins的项目自动构建就算成功。

到此,我们就完成了一个最简单的通知模型:只要gitea这边一推送代码,jenkins那边就会自动触发一次sonarqube的全量扫描。

3. 扫描完成后的通知功能:Email

由于不同的项目代码量不一样,我们也不能在这傻等着看他扫描代码,所以接下来我们需要实现一个代码扫描完成之后主动通知的功能。

插件安装

jenkins->系统管理->插件管理:安装Email Extension这个插件->重启jenkins。

  • 如果你在第一次进入jenkins时选择了推荐安装,一般是已经有了,在已安装的插件里面确认一下就可以跳过这一步了。

系统配置

我们以QQ邮箱为例,进入你的邮箱网页的设置页,找到SMTP服务,按照邮箱的要求进行服务的开启和设置,总之你最后会拿到一个授权码。
在这里插入图片描述
jenkins->系统管理->系统配置->系统管理员邮件地址,不然邮件发送功能无法使用,会报501的错误。

jenkins->系统管理->系统配置,页面下滑到最下面的邮件通知,把高级点开我们开始填参数。

  • SMTP服务器:不同的邮箱系统不一样,QQ的话是smtp.qq.com。这个需要你自己去百度
  • 用户名:你的邮箱账号
  • 密码:不是你的邮箱密码,而是授权码。
  • 然后勾选SSL协议。

这样就算设置好了,然后 勾选通过发送测试邮件测试配置,在输入框里面输入一个邮箱地址,点击右下角的测试按钮(Test Configuration)。调试到通过之后保存,邮箱发送功能就算弄好了。
在这里插入图片描述

项目配置(Jenkinsfile)

回到项目文件的Jenkinsfile中,在末尾增加以下内容。

	post {always {mail to: 'recipient@company.com',subject: "构建通知: ${env.JOB_NAME} - ${currentBuild.result ?: 'SUCCESS'}",body:"""<h2>Jenkins 构建通知</h2><p><b>项目:</b> ${env.JOB_NAME}</p><p><b>状态:</b> ${currentBuild.result ?: 'SUCCESS'}</p><p><b>详情:</b> <a href="${env.BUILD_URL}">查看构建详情</a></p>"""}}

把to的部分修改掉,改成我们的目标邮箱。

然后提交一个commit,再push到服务端。

不出意外的话,gitea会通知jenkins开始构建,而jenkins构建结束之后,又会触发邮箱通知功能将结果告诉给我们。至此我们的三容器通信和通知功能的基本模板就完成了。

4. Jenkinsfile:从全量编译到增量编译

最后就是实现一个基本的增量编译效果,
将Jenkinsfile中的stage(‘SonarQube Analysis’) 进行如下修改:

		stage('SonarQube Analysis') {environment {scanner = tool 'default-sonar-scanner'}steps {script {// 获取当前和上一次提交def currentCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()def previousCommit = sh(returnStdout: true, script: 'git rev-parse HEAD~1').trim()// 获取变更的 Java/XML 文件(根据您的项目类型调整)def changedFiles = sh(returnStdout: true, script: "git diff --name-only ${previousCommit} ${currentCommit} -- '*.java' '*.kt' '*.xml'").trim()if (changedFiles.trim()) {echo "分析变更文件:\n${changedFiles}"withSonarQubeEnv('my-sonarqube') {sh """${scanner}/bin/sonar-scanner \-Dsonar.projectKey=test\-Dsonar.projectName="测试项目" \-Dsonar.sources=. \-Dsonar.scm.revision=${currentCommit} \-Dsonar.scm.previousRevision=${previousCommit} \-Dsonar.scm.provider=git \-Dsonar.inclusions=${changedFiles.replaceAll('\n', ',')}"""}} else {echo "没有检测到相关的代码变更,跳过 SonarQube 分析"}}}}

同样,你只需要填写其中的这几个字段,填写规则和上篇文章一样:

  1. withSonarQubeEnv(‘my-sonarqube’)
  2. -Dsonar.projectKey=test
  3. -Dsonar.projectName=“测试项目”

填写完成之后,随便改一点代码,然后commit后触发自动扫描,就能得到最终的结果。

5. 结尾

我们在这一篇完成了

  1. 最简单的webhook模型。
  2. 最简单的邮箱通知功能。
  3. 最简单的增量编译功能。

通过这三个最简单的模型,我们打通了三个容器互相通知的链路,同时完成了最简单的自动化构建流程,后续就可以以现在的知识点为基础,举一反三去完成复杂的现实项目场景了。

参考资料

deepseek

http://www.dtcms.com/a/524250.html

相关文章:

  • 对我单位网站进行改版苏州网站建设开发公司
  • 网站架构文案软文推广去哪个平台好
  • 【Cuda C 编程指南第7章 硬件实现】
  • 低代码开发,如何让企业应用搭建化繁为简?
  • npm使用国内淘宝镜像的方法
  • pnpm + webpack + vue 项目依赖缺失错误排查与解决
  • 北斗GNSS变形监测一体机在地质灾害和桥梁安全中的应用解析
  • C++ 中的 initializer_list 详解
  • 网站建设与管理好处网站 流量 不够用
  • 2025年第六届MathorCup大数据竞赛赛题浅析-助攻快速选题
  • 网站注册转化率网站建设营销
  • 做食品网站的素材海南省建设注册执业资格中心网站
  • 烧结工序的“隐形守护者”:在线监测如何成为钢铁制造的关键支柱
  • Vue2下项目集成DeepSeek API
  • Mysql作业3
  • 指定列交集内容合并-Rscript_v1.0
  • 基于单片机的牧场奶牛养殖系统设计(论文+源码)
  • 市场上有哪些主流的 MFT 管理软件?
  • webrtc弱网-PccNetworkController类源码分析与算法原理
  • 做任务得得q币的网站临沂seo排名外包
  • 豆浆机破壁机MCU控制方案开发设计-基于国产单片机开发
  • 基于开源链动2+1模式、AI智能名片与S2B2C商城小程序的预搜索机制优化研究
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的微商本地化发展研究
  • 从“事后抢险”到“事前防控”:江西水投用 TDengine 时序数据库重塑防汛模式
  • 【Https】Received fatal alert: internal_error
  • 从 WebSocket 到 SSE,大模型应用绕不开的 SSE
  • 网站上线所需的东西哪里好浙江建筑培训网
  • 纯前端实现 篮球计分板 Demo
  • Opencv(一): 用Opencv了解图像
  • 彻底掌握 CSS 定位:深入理解 relative、absolute、fixed 与 sticky 的原理与实战