Gitlab+Jenkins+SonarQube实现代码质量扫描自动化 您所在的位置:网站首页 gitlab代码扫描 Gitlab+Jenkins+SonarQube实现代码质量扫描自动化

Gitlab+Jenkins+SonarQube实现代码质量扫描自动化

2024-01-12 06:51| 来源: 网络整理| 查看: 265

背景

按照安全基线的要求,需要对上线前的代码进行扫描。

此前,测试已经搭建过一个扫描服务,sonarqube。

在这里插入图片描述

流程定义

大致的流程如下:

开发提交代码在 Gitlab 上提交MRJenkins 接收到创建MR的通知,检查是否符合规则若符合规则,则执行扫描扫描结束后,执行 Python 脚本,获取扫描状态根据扫描结果,设置临时环境变量评论MR

在这里插入图片描述

基础环境 GitLabJenkinsSonarqube Sonarqube配置 安装多分支扩展(开发版路过)

传送门

生成访问令牌

配置路径:我的账号 → 安全 → 令牌

TIPS:生成的令牌要记下来,划走就再也找不到了。

在这里插入图片描述

Jenkins配置 安装 SonarQube Scanner for Jenkins 扩展

路径:Manage Jenkins → Manage Plugins → Available(Tab)

在这里插入图片描述

配置 SonarQube Scanner for Jenkins 扩展

路径:Manage Jenkins → Global Tool Configuration → SonarQube Scanner → Add SonarQube Scanner → Apply

在这里插入图片描述

路径:Manage Jenkins → Configure System → SonarQube servers → Add SonarQube → Apply

在这里插入图片描述

凭据选项配置

路径:Manage Jenkins → 凭据配置 → Restrictions → Add → 包括 → Apply

在这里插入图片描述

配置凭据

配置 Gitlab 用户,用于拉取代码

路径:Manage Jenkins → Manage Credentials → Add Credentials → OK

在这里插入图片描述

配置 SonarQube token

路径:Manage Jenkins → Manage Credentials → Add Credentials → OK

在这里插入图片描述

创建新项目

路径:New Item → Freestyle project

在这里插入图片描述

配置项目

路径:项目 → Configure → Apply

1、配置 Git 仓库,指定哪个分支被扫描

在这里插入图片描述

2、配置触发器,指定什么时候触发构建

同时,指定需要过滤的分支

生成 Token,后续在 Gitlab Webhook 会用

在这里插入图片描述

3、指定 SonarQube 的 token

在这里插入图片描述

4、指定构建时需要做的事情

在这里插入图片描述

① Execute SonarQube Scanner — 配置扫描器做的事

sonar.projectKey=sonarcrmweb sonar.projectName=sonarcrmweb sonar.projectVersion=1.0 sonar.language=php sonar.sourceEncoding=UTF-8 sonar.branch.name=${GIT_BRANCH}

② Execute Python script — 调用 SonarQube 的 API 获取执行结果

#!/usr/bin/python # -*- coding: UTF-8 -*- import requests import json import sys import os import base64 try: token = str(base64.b64encode('60c7dfb44f5e0f08c539e16a58421979f975606a:'.encode('utf-8'))) r = requests.get('http://192.168.35.124:9000/api/qualitygates/project_status?projectKey=sonarcrmweb&branch=' + os.environ['GIT_BRANCH'], headers={'Authorization': 'Basic ' + token}) print r.text sonarStatus = json.loads(r.text.decode('utf-8'))['projectStatus']['status'] sonarResult = 'Sonar analysis status is ' + sonarStatus except Exception as e: print e sonarResult = str(e) pass print sonarResult with open('pyresult.txt', 'w') as f: f.write('ANALYSIS_RESULT=' + sonarResult)

③ Conditional step (single) — 用于设置 Python 脚本获取的执行结果到临时环境变量

5、配置构建完成时的动作,给 MR 写备注

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxOkXkma-1631262530125)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9ef4f0a-1a4c-4def-8fc5-487292e3b798/Untitled.png)]

Gitlab配置 配置 Access Tokens

路径:setting → Access Tokens

在这里插入图片描述

记住这里的 token,需要回到 Jenkins 配置 Gitlab相关。

在这里插入图片描述

配置 WebHook

在这里插入图片描述

Jenkins 配置 Gitlab 配置凭据

配置 Gitlab API Token,用于提交评论

路径:Manage Jenkins → Manage Credentials → Add Credentials → OK

在这里插入图片描述

添加 Gitlab 配置

路径:Manage Jenkins → Configure System → Gitlab → Add → Apply

在这里插入图片描述

最后

折腾…



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有