docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube

什么是SonarQube?

看看维基百科的说明:f5213b13dd22ba4e37fba1630ddb2744.png

SonarQube与CI/CD架构图

a4647be594d7a1957b337eb07fad6de8.png
SonarQube与CI/CD架构图

Docker运行SonarQube

简单了解之后,开始安装SonarQube.这里用Docker安装

注:这里用mysql来存储SonarQube的数据,SonarQube7.9起已经不在支持mysql了,可以安装官方推荐的PostgreSQL

  • SonarQube 6.7.7
  • Docker-CE 19.03.1
  • Mysql 5.7

安装

直接运行这个docker命令来安装,网上其他的教程有什么挂载文件什么的,我试了都会安装失败,原因还是因为权限原因,因为SonarQube不是以root用户运行的,导致没权限读写挂载出来的文件夹.

注意:创建容器前一定要先保证你连的容器有对应的数据库

docker run -d --name sonarqube -p 9099:9000 -p 9092:9092 --link=dev_mysql:mysql -e SONARQUBE_JDBC_USERNAME=app -e SONARQUBE_JDBC_PASSWORD=app -e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" --restart=always sonarqube:6.7.7-community
  • --link=dev_mysql:mysql     这个命令我链接到了我的mysql容器,dev_mysql是容器的名字,mysql是在SonarQube容器里的别名,所以链接数据库时直接用mysql这个别名就可了.

  • SONARQUBE_JDBC_USERNAME :数据库的账户

  • SONARQUBE_JDBC_PASSWORD :数据库密码

访问

安装好后直接访问9099端口,登录的账户和密码默认都是admin.首页就是这个样子的.

7b4c0306a67c5ed9aae86fe073b705a8.png

Jenkins集成SonarQube

Jenkins和SonarQube都是运行在Docker容器里的

下载和安装插件

直接下载最新版的,然后导入,导入的方法可以看插件导入方法[1]

  • 插件下载地址:https://updates.jenkins.io/download/plugins/sonar/

SonarQube生成Token

进入SonarQube管理界面

Administration->Security->Users

8e18ad9d4d26aa61c37af8420e21c550.png

然后随便输入一个名字,点击生成,记下Token

e27b6c95243870c983405f585237ecef.png

添加全局凭证

类型选Secret text,然后Secret和ID输入框都填入刚才生成的Token

e6124a6ac9d08f380b6c9ad5ebc384f4.png

设置SonarQube servers

进入 系统管理->系统设置->SonarQube servers    设置好后点保存

因为我SonarQube和Jenkins安装在同一台机器不同的Docker容器里的,所以这里URL直接填SonarQube的Docker容器的IP和端口

aa0a182d9d1a051ad62f67c22441337f.png

安装SonarQube Scanner

下载压缩包

  • 下载SonarQube Scanner压缩包:SonarQube Scanner[2]

解压到Jenkins挂载出来的目录里

只有解压到挂载出来的Jenkins的目录里,Docker容器安装的Jenkins才能读取到,我这里是宿主机的/opt/jenkins挂载到了Jenkins容器里的/var/jenkins_home目录上,所以我只要解压到宿主机的/opt/jenkins目录中就可以了

Jenkins配置全局工具

进入 系统管理->全局工具配置->SonarQube Scanner     找到模块后点击新增SonarQube Scanner

SONAR_RUNNER_HOME填你Jenkins这个Docker容器里的路径

f05e8d692204439dbfeddf88f14ad4d7.png

构建一个Maven项目

网上很多教程说要勾上这个选项:

01167afb7412f40466a9a31fc5cc3b25.png其实这个是可选的,下面有一句话:These variables are useful when configuring a SonarQube analysis using standard build steps such as Maven, Gradle, Ant, and command line scripts.This feature is not needed if you're using "SonarQube Scanner" or "SonarScanner for MSBuild" build steps.

翻译过来就是:140a847d41936b15e046b75a9bc1ab1a.png因为我们这里用的就是SonarQube Scanner,所以这个我们是可以不用勾上的,但是勾上也没影响;

开始构建

  • 具体怎么构建项目可以看:Jenkins教程-创建Maven项目[3],这里就不多介绍了

添加Execute SonarQube Scanner

在原来构建的基础上加上Execute SonarQube Scanner,就可以了

e2ee3c16fcc490ed42ecea1f3d2e50a2.png

在Analysis properties里填上构建的参数

1c7eff695d826bb5299fed7e1bf67b19.png

唯一的项目标识符(必填) sonar.projectKey =tiny-config1

项目元数据(以前是必需的,自SonarQube 6.1起是可选的) sonar.projectName =tiny-config1 sonar.projectVersion = 1.0

源目录的路径(必需) sonar.sources = srcDir1,srcDir2

测试源目录的路径(可选) sonar.tests = testDir1,testDir2

Java项目编译类的路径(可选) sonar.java.binaries = bin

逗号分隔的库路径列表(可选) sonar.java.libraries = path / to / library.jar,path / to / classes / dir

附加参数 sonar.my.property =value

保存后就可以正常构建了.

错误解决(没有错误可跳过这段)

如果在构建项目的时候,Jenkins控制台如果报一下错误,这是因为SonarQube的Java版本太低造成的afb330179a18e4870dd3945f76bb7d4b.png

升级SonarQube的Java版本

进入SonarQube的管理台:Administration->Marketplace->SonarJava

如果你版本没升级,右边会有个update按钮,点击就可以升级了,升级完后重启SonarQube;这边因为我已经升级过了,所以没有这个按钮

2cc665e2197101400a0532094fdbcf53.png

构建完成后

Jenkins控制台显示SUCCESS就表示构建成功了

ac2b5cade9a334d4420f4614bd4097eb.png

这时候就可以点击构建项目的SonarQube直接跳转到SonarQube控制台了

d11b71ba30e52ed4ea64c2f7e57d1ebb.png

这里就可以看到结果了

3c66e267c838df8a3e05db502247aeb5.png

总结

到这里就可以根据SonarQube的提示去改BUG了.这BUG有点多=_=!.

在搭建过程中,最主要的就是那个SonarQube Scanner这个的安装了,因为Jenkins都是Docker化的,所以他可以选择自动安装,但是我这边选择自动安装却没用,所以就自己下载了SonarQube Scnner的包挂载到Jenkins容器里去,然后直接指定SonarQube Scnner的目录就可以了;

参考资料

[1]

插件导入方法: https://mjava.top/jenkins/problem-jenkins-01/

[2]

SonarQube Scanner: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip

[3]

Jenkins教程-创建Maven项目: https://mjava.top/jenkins/build-jenkins-mavne/


5dea0bf73ec9345a132fe38761124ebb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python写选择排序_如何快速掌握python选择排序算法?

对于算法,我们不少讲述,但是大部分小伙伴都希望,将单个算法拆分讲解,这样可以更加深对算法的印象,好了,本期,就针对选择排序算法,给大家讲解说明哦~感兴趣的小伙伴一起来看下吧~ 在列…

实现if_数组实现固定栈和队列+栈与队列相互实现

文章目录一、数组实现固定栈和队列1.数组实现固定栈2.数组实现固定队列二、栈与队列相互实现1.两个队列实现栈2.两个栈实现队列一、数组实现固定栈和队列1.数组实现固定栈代码如下:class ArrayStack { private:int *arr;int index; public:ArrayStack(int initSize)…

友情提示,你该找一份假期实习啦!

假期已至, 这么漫长的寒假, 你是否有找一份实习的打算呢? 是否毫无头绪和思路? 是找一份毫无意义的推销工作,传单,快餐店,电话推销等,还是真正找到兴趣所在,专业相关&…

什么意思_invalid是什么意思

invalid是什么意思in,常见的表示反义的前缀,更多例子比如:indifferent, infinite, incapable, etc. valid,形容词,有根据的、让人信服的、有效的、有法律效力的。相关的单词我们还背过validity.validinvalid&#xff0…

互联网技术+非技术书单资源分享,都给泥萌!

为了更好的帮助到大家,从讨论区去找到对应的分享给大家 欢迎留言你想要的书资源,并说明理由(比如为什么想看这本书之类的),这边有的话都会汇总~~ 深入理解java虚拟机 链接: https://pan.baidu.com/s/1wXGZnMiDKd6AKS…

createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)

前言我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到100%了么?你如何保证你的测试质量?测试用例的覆盖率如何统计呢,如何知道开发的代码,我们都测到了,不…

java包名和类名可以一样吗_Java入门第三课:Java基本语法

Java基础编写Java程序时,应注意以下几点:1.大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。有些操作系统不区分大小写,不区分的话,文件名是不完全正确的。 然而,如果你的…

C语言入门精髓

上篇说到了C语言还是很基础的编程语言,还是值得去学,那么怎么去学?什么人才能学好?为什么学到一半就早早缴械投降了?众多迷雾,众多的困难,怎么破局? 如有小伙伴想学习C语言基础&…

python 取余_玩转Python源码(一) quot;%squot;与“%d”

某一天吹水的时候,吹着吹着就吹到了一下这么一个案例。import timeitdef a():"%s, %s" % (1, 2)def b():"%s, %d" % (1, 2)def c():"%d, %d" % (1, 2)t timeit.timeit(stmt"a()", setup"from __main__ import a&quo…

笔刷怎么做_原来是这样:用PS笔刷做出颜料肌理效果!

题图插画 | TX灼灼“当我意识到可以利用PS的某些工具,设置不同的画笔之后,一切都变了。有些看起来很不合逻辑的组合,最后产生的效果却是逼真的惊人,再结合合适的形状就能创作出特别又新奇的东西。”——自制笔刷收入超10万美元的插…

qt 3d迷宫游戏_机械迷宫—一款机械风格的3D立体解谜独立游戏

解谜游戏一直是游戏类别中的一个大类,这里面各式各样的解密游戏,多不胜数。解密游戏又分很多种类,比如动作冒险新式的解密游戏,文字图像类型的解密游戏;游戏制作上有大有小,但是都有一个共同特点&#xff0…

Ubuntu下的Linux内核的编译及安装

推荐群:C/C大学技术协会:145655849 Linux中的模块(Modules) Linux的module其实可以看作是内核的插件。 在Linux系统中,可以通过文件 cat /proc/modules xxxxxxxxxx1 1cat /proc/modules 查看相关的驱动模块。 也可以通过命令 l…

执行公式_一学就会,一吃就瘦,超简单又好执行的减肥食谱公式!

对于很多人来说,没有精确计算食物重量的条件,无法每天花费大量的时间精力去自己准备健康的食物,给大家一个不需要食物称,只要在日常饮食基础上看看自己的手掌就能通过类比来选择好食物的种类和合适比例的方法!碳水化合…

apollo源码分析 感知_Kitty中的动态线程池支持Nacos,Apollo多配置中心了

目录回顾昨日nacos 集成Spring Cloud Alibaba 方式Nacos Spring Boot 方式Apollo 集成自研配置中心对接无配置中心对接实现源码分析兼容 Apollo 和 Nacos NoClassDefFoundErrorApollo 自动刷新问题回顾昨日上篇文章 《一时技痒,撸了个动态线程池,源码放 …

c语言 把字符串转换为变量名_如何将抓取下来的unicode字符串转换为中文

如果抓取的数据是json数据,那么直接将抓取的数据用json格式输出出来就行了。如下:response requests.get(url, headersself.headers).json()如果是unicode字符串,那么请继续往下看大家有没有遇见抓取下来的数据是unicode字符串的?如下图所示…

c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升

一、操作目的和应用场景Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独…

Python 数据分析 Matplotlib篇 时间序列数据绘制折线图(第4讲)

Python 数据分析 Matplotlib篇 时间序列数据绘制折线图(第4讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

家装强电弱电布线图_家装水电施工标准(图文版),装修小白一眼也能看懂。...

如果把家比喻成一个人,房子是骨骼,那么水电路则相当于人体的血管和动脉,正因为他们的存在,才赋予家鲜活的生命。由此,水电施工自然也成为家装工程的重中之重。水电走线原则※ 水电弹线放样施工,使用切割机开…

0基础必看:如何轻松成为C语言高手

诞生于上世纪70年代的C语言是一门古老的语言了, 但作为一门底层语言,时至今日它仍然非常强大。学习C语言能够为学习其他更复杂的语言打下良好的基础,因为你在C语言中学习到的知识对几乎所有的编程语言都适用。下面就来看看如何开始用C语言编程吧。   工具   Mic…

python列表元素之和_python实现计算列表元素之和

目标:定义一个数字列表,并计算列表元素之和。 例如: 输入 : [12, 15, 3, 10] 输出 : 40 方法一:total 0 list1 [11, 5, 17, 18, 23] for ele in range(0, len(list1)): total total list1[ele] print("列表元素之和为: &…