Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

前言

本篇文章主要介绍的是Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台的集成。

博客之前已经有关于Jenkins、SonarQube、Gitlab分别安装的文章,本文主要说明三种平台集成使用,实现代码持续集成与自动化部署。

一、jenkins集成gitlab

jenkins中添加gitlab插件,选择直接安装,然后服务器中重启jenkins。

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

gitlab中生成AccessToken

打开gitlab,在gitlab中用户设置—>访问令牌选项中生成token,scope为第一个等级:api

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

jenkins中添加gitlab中生成的token

1.打开jenkins,在Jenkins添加全局凭据,类型为APIToken

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

2.使用Test connection验证添加成功
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

安装中可能出现的问题:
Manage Jenkins—>出现红色报错信息 pluginname is missing. To fix, install v** or later. 插件所依赖的其他插件,需要自己安装。
解决方案:http://updates.jenkins-ci.org/download/plugins/中搜索报错信息中对应的pluginname, 选择合适的版本下载,然后手动上传。最后服务器中使用systemctl restart jenkins.service 重启Jenkins
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

至此,Jenkins集成gitlab完成,接下来集成sonarqub后,将使用demo一起进行演示。

二、jenkins集成sonarqube

1.打sonarqube,点击Administrator->security->user,点击token按钮,输入key后再点击generate进行生成,复制该token。

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

2.打Jenkins,Jenkins中安装插件 SonarQube-scanner(插件版本为2.6.1),插件可在http://updates.jenkins-ci.org/download/plugins/ 中下载,浏览器中ctrl+f,搜索sonar。然后在Manage Jenkins-->Manage Plugins-->高级中,上传插件,重启Jenkins。

3.在系统管理->系统设置中,找到SonarQube servers模块,填写服务器信息

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

4.加载JDK与Sonar-scanner全局配置,jdk安装目录为Jenkins中jdk的安装目录,如果有默认配置,需要先删除。

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

三、demo测试

gitlab部分

1.进入gitlab首页,创建群组
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

2.在群组中创建一个项目

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

3.复制该项目的gitlab地址
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

4.打开资源管理器,新建一个文件夹作为 Git 代码存放位置,进入该新建文
件夹后在空白处单击鼠标右键,选择“Git 克隆…”;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

5.可能会有弹窗,要求输入gitlab的账号密码,输入即可。
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

6.克隆完成后,点击关闭按钮
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

7.上传代码测试,进入【demo】文件夹,将一份代码复制至该目录下;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

8.在空白处单击鼠标右键,选择“Git 同步…”,在弹出的“Git 同步–TortoiseGit”对话框中点击“拉取(P)”按钮,同步项目在 Gitlab 服务器的版本;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

9.在空白处单击鼠标右键,选择“Git 提交(C) ->”master”…”;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

10.待提交成功后,点击“推送(H)”按钮,并在弹出的“推送 –TortoiseGit”对话框中勾选“推送所有分支(P)”,单击“确定”按钮完成代码推送;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

11.刷新gitlab页面,发现上传成功。
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

jenkins部分

PS:此实例目标为实现 Gitlab 中【demo】项目更新代码时, Jenkins 同步更新代
码并完成自动化部署。

1.登录jenkins,单击左侧主菜单中的“新建 Item”按钮,进入新建任务向导;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

2.输入任务名称“demo”,选择“Freestyle project”后点击确定;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

3.点击“源码管理”标签,选择“Git”单选框,输入【demo】项目克隆链接,在“Credentials”单选框中添加凭证,然后选择该凭证;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
添加凭证;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

4.配置 Webhook,点击“构建触发器”标签,勾选“Build when a change is pushed to GitLab. GitLab webhook URL:...”,并点击弹出菜单中的“高级…”按钮;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

5.点击"Secret token"标签右侧的"Generate"按钮生成 Token 密钥,记录该密钥及该工程在 Jenkins中的URL(分别在如下图"2"、"3"所示位置),点击“保存”按钮完成工程配置。
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

6.登录 Gitlab 并进入【demo】项目,点击左侧菜单中“设置-集成”标签;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

7.在 URL 中键入刚刚获取到的 Jenkins 工程 URL 及 Token 密钥,点击"Add webhook"按钮完成 Gitlab 中【demo】项目配置;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

8.出现【urlis blocked:Requests to the local network are not allowed】错误
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

解决方案:
gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录,默认管理员帐号是root或者admin@example.com,密码就是你gitlab搭建好之后第一次输入的密码,登录之后,走下图步骤:
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
重新走第六、七步骤。

9.向下滚动右侧拖动条可见新建的 Webhook,点击右侧“Test”下拉框,选择“Push events”测试 Webhook 配置,如显示 Hook executedsuccessfully: HTTP 200 即表明 Webhook 配置成功;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

10.重新切换到 Jenkins【demo】工程中可见 Jenkins 已成功响应 Gitlab的 Push 事件;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

11.Push测试
打开资源管理器,进入【demo】项目文件夹,新建一个文本文档;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
在空白位置单击鼠标右键选择“Git 同步”并在弹出对话框中完成服务器代码版本拉取;
同步服务器代码版本后单击鼠标右键选择"Git 提交(C) ->"master"…"并在弹出对话框中完成变更提交
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

12.在 Jenkins 成功看到 Push 事件即表明 Jenkins 配置成功;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

jenkins集成sonarqube部分

ps:此教程对 SonarQube 的使用全部基于 Jenkins 平台;
1.打开浏览器通过任意链接访问Jenkins,进入Jenkins主页;点击【demo】项目进入项目主页;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

2.点击左侧菜单栏“配置”按钮进入项目配置;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

3.点击"构建触发器"标签,在"构建"一栏中点击"增加构建步骤"下拉框,选择"Execute SonarQube Scanner";
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

4.在弹出的“Execute SonarQube Scanner”页面中填入以下 Analysis properties 信息后单击“保存”按钮完成项目配置;

# 项目标识符,在给定的 SonarQube 中必须是唯一的
sonar.projectKey=lxgblog:demo
# 项目名称,这是 SonarQube 中显示的名称
sonar.projectName=demo
# 项目版本号
sonar.projectVersion=1.0
# 以下定义可在项目根目录新建 sonar-project.properties 文件, SonarQube 会默认读取该文件,
# 指定工程源文件所在的目录, "./"可表示根目录,在 Windows 系统使用时注意用"/"代替""
sonar.sources=./src
# 针对 JAVA 工程,需要指定 class 文件所在的目录
sonar.java.binaries=./target/classes
# 指定工程编程语言
sonar.language=java
# 指定工程字符编码
sonar.sourceEncoding=UTF-8

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

5.Build 测试,回到【demo】项目主页,单击左侧菜单栏“Build Now”按钮进行代码编
译,可以在 Build History 中实时看到编译过程,编译完成后会生成一个新的构建历史#4
(ps:#3被我删了);

6.点击“#4”按钮进入 4 号构建过程,点击左侧菜单栏“控制台输出”按钮可以看到本次项目构建的详细过程(有兴趣的可以看看整个工程构建及代码分析过程);
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

7.回到【demo】项目主页,点击左侧菜单栏"SonarQube"按钮将跳转到SonarQube 项目名为【demo】的主页即可看到代码分析的结果;
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台
Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

CSDN:https://blog.csdn.net/qq_27682773
简书:https://www.jianshu.com/u/e99381e6886e
博客园:https://www.cnblogs.com/lixianguo
个人博客:https://www.lxgblog.com