目录导航
GitLab,Jenkins,Sonar 实现代码自动检查
简介: 提交代码到 GitLab,Jenkins 自动拉取代码,Sonar 负责代码检查。
本文中自动分析过程大致为以下步骤:
-
提交 Java 项目代码至 GitLab。
-
GitLab 通过 webhook 自动触发 Jenkins执行任务
-
Jenkins 获取代码,执行 Sonar 分析代码。
-
在 Sonar 的服务器界面查看分析结果
本文的文章结构为:
-
先实现代码扫描。
-
在此基础上,实现自动化代码扫描。
目的: 保证代码质量,便于后期代码维护。代码自动化检查。
本文参考: https://www.jianshu.com/p/e111eb15da90
环境:
-
CentOS Linux release 7.6.1810 (Core)
-
Docker version 18.09.3, build 774a1f4
-
Jenkins 2.177 (2019-05-12)
创建时间:2019/5/21 20:45:56
创建人:于子源
修改记录:修改人+修改时间+修改说明(多人修改时,增加多条)
当前版本:version 1.0.0
安装 Jenkins
跳转:https://blog.csdn.net/KissedBySnow/article/details/89297526
安装 SonarQube
-
安装 SonarQube
docker run \ -d \ --name sonar \ -p 9000:9000 \ sonarqube:7.4-community
123 实验机在安装的时候并未报错,本次安装为 121 实验机的安装过程,报错如下:
WARNING: IPv4 forwarding is disabled. Networking will not work.
警告:IPv4转发被禁用。人际关系网行不通。
解决方法: 跳转: https://blog.csdn.net/yjk13703623757/article/details/68939183
-
访问 http://localhost:9000 地址,等待出现下面界面。点击界面右上角 log in ,并使用默认用户和密码 admin / admin登录。
-
登录后按照下图中步骤,生成访问 token (生成声纳令牌A)
配置 Jenkins
Jenkins 安装 SonarQube Scanner 插件
Jenkins 安装 SonarQube Scanner
插件。
Jenkins 配置 SonarQube Scanner 插件
-
系统设置
在 Jekins 中,进入
系统管理
->系统设置
->SonarQube servers: 勾选Enable injection of SonarQube server configuration ...
选项。输入:-
Name:
可自定义。 -
Server URL:
SonarQube 服务器的 URL。 -
Server authentication token:
点击Add
配置凭证:类型: 选择GitLab API token
。API token: 为前面部署 SonarQube 服务器时创建的 token。
点击
Add
没有反应,建议更换浏览器,是浏览器兼容性问题。 -
-
全局工具配置
进入
系统管理
->全局工具配置
->SonarQube Scanner: 点击SonarQube Scanner installations...
并配置 SonarQube Scanner。点击
Maven installations...
并配置 Maven。
创建 Maven 项目
-
Source Code Management (源码管理): 选择
Git
-
Repository URL:
为 GitLab/GitHub 地址。 -
credentials (凭证信息):
点击Add
添加凭证。在这里就不详细说明了。 -
Additional Behaviours:
添加Clean before checkout
。
-
-
Build Environment (构建环境): 勾选
Prepare SonarQube Scanner environment
。 -
Post Steps (发布步骤): 点击
Add post-build step
,添加Execute SonarQube Scanner
。Task to run:
输入scan
,即分析代码。
Analysis properties:
输入以下内容:sonar.projectKey=demo sonar.projectName=demo sonar.language=java sonar.java.binaries=$WORKSPACE/target/classes/ sonar.sources=$WORKSPACE/src sonar.java.source=1.8
-
sonar.language 指定了要分析的开发语言(特定的开发语言对应了特定的规则)
-
sonar.java.binaries 定义了需要分析代码的编译后 class 文件位置
-
sonar.sources 定义了需要分析的源代码位置(示例中的$WORKSPACE 所指示的是当前 Jenkins 项目的目录)
-
sonar.java.source 指定java版本
-
测试 Jenkins 任务
构建项目:点击立即构建。
执行成功后,打开 SonarQube 的地址,即可看到代码检查结果。
至此,已经完成了第一步,Jenkins 与 Sonar 之间已经打通。代码也已经可以被扫描了。
接下来了是完成第二步,打通 GitLab 与 Jenkins 之间的 Sonar 通道,当代码提交到 GitLab 上时,GitLab 通知 Jenkins 构建项目。这一步完成之后,代码就可以自动触发了。
GitLab 创建 Personal Access Tokens
用户设置
->Access Tokens
->Personal Access Tokens:
Name:
自定义。
Scopes:
勾选 api
点击 Create personal access token
创建个人访问令牌。创建成功后,将生成的 Your New Personal Access Token
保存下来,接下来要用到。
Jenkins 安装 GitLab 插件
Jenkins 安装 GitLab
插件。
Jenkins 配置 GitLab 插件
在 Jekins 中,进入 系统管理
->系统设置
->Gitlab:
-
Connection name:
自定义。 -
Gitlab host URL:
GitLab 的网址。 -
Credentials:
点击Add
配置凭证:类型: 选择GitLab API token
。API token: 为刚刚在 GitLab 生成的Personal Access Token
。
点击 Test Connection
测试是否配置成功。测试成功后保存。
配置 Jenkins 任务
Build Triggers (构建触发器): 勾选 Build when a change pushed to Gitlab.Gitlab webhook URL...
这里的 webhook URL 在后面配置 GitLab 时需要用到,记得保存。点击 高级
按钮,然后点击 Generate
按钮生成 Secret token (秘密令牌)。
GitLab 配置 webhook
在 Gitlab 的项目设置中选择 Integrations:
URL:
上一步的 webhook URL。
Secret token:
上一步生成的 Secret token (秘密令牌)。
由于每次代码提交到 GitLab 后都触发 Jenkins 执行任务,所以这里勾选 Push events
,然后去掉 Enable SSL verification
选项,并点击 Add webhook
按钮完成添加。
测试 webhook
添加完成后,在下面可以看到刚才添加的 webhook,点击 Test
按钮在弹出的菜单中选择 Push events
发送测试请求。
发送成功后会显示 Hook executed successfully 信息。
webhook 发送成功后,到 Jenkins 中可以看到正在执行触发的任务。配置成功后,后面只要 git push
到 GitLab 即可触发 Jenkins 执行 Sonar 任务。
至此,结束。