背景
按照安全基线的要求,需要对上线前的代码进行扫描。
此前,测试已经搭建过一个扫描服务,sonarqube
。
流程定义
大致的流程如下:
- 开发提交代码
- 在
Gitlab
上提交MR Jenkins
接收到创建MR的通知,检查是否符合规则- 若符合规则,则执行扫描
- 扫描结束后,执行
Python
脚本,获取扫描状态 - 根据扫描结果,设置临时环境变量
- 评论MR
基础环境
- GitLab
- Jenkins
- Sonarqube
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 写备注
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
最后
折腾…