Gitlab+Jenkins+SonarQube 实现代码审计指南
- 环境说明
虚拟系统:Centos7
本机系统:Mac
Gitlab:社区版11.10.0
Gitlab-Runner:11.10.0
SonarQube:社区版7.7
SonarScanner:3.3.0
Jenkins:2.174
虚拟机配置Gitlab
# 解决依赖
yum install policycoreutils-python.x86_64 openssh-server.x86_64 -y
# 安装邮件服务
yum install postfix.x86_64 -y
# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
# 添加社区版package
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
# 安装社区版gitlab
yum install gitlab-ce.x86_64 -y
# 或者使用国内镜像安装
# 配置gitlab站点url,我这里使用ip替代
vim /etc/gitlab/gitlab.rb
external_url "http://10.10.10.5"
# 启动gitlab
gitlab-ctl reconfigure
解决端口冲突
由于我先配置了Jenkins,8080端口被占用,如果你直接访问,会出现
解决方案是:修改unicorn(备注:不一定都是这个错误,也有可能内存不够,参考点我)
# 修改配置文件
vim /etc/gitlab/gitlab.rb
unicorn['listen'] = 'localhost'
unicorn['port'] = 8082 # 原本为:unicorn['port'] = 8080
# 修改监听文件
vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
listen "127.0.0.1:8082", :tcp_nopush => true # 原本为:listen "127.0.0.1:8080", :tcp_nopush => true
# 重启服务
gitlab-ctl restart
虚拟机配置Gitlab-Runner
# 添加package
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
# 安装
yum install gitlab-runner.x86_64 -y
虚拟机配置Jenkins
# 下载jenkins
wget jenkins-2.174-1.1.noarch.rpm
# 安装
rpm -ivh jenkins-2.174-1.1.noarch.rpm
# 配置
vim /etc/sysconfig/jenkins
JENKINS_USER="root" # 这么做仅限于测试环境,为了出现调试各种权限问题;生产不允许这么做
# 修改目录权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
# 启动服务
systemctl start jenkins.service
# 访问8080端口
# 密码文件
cat /var/lib/jenkins/secrets/initialAdminPassword
# 选择默认的插件
虚拟机配置SonarQube
如果java环境是配置安装的,需要指定java环境:vim sonarqube-7.7/conf/wrapper.conf
# 安装jvm环境
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y
# 安装数据库
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
yum install mysql-community-server.x86_64 -y
# 添加用户
useradd sonarqube
passwd sonarqube
# 下载文件
wget sonarqube-7.7.zip
# 以下内容省略
# 配置gitlab插件
# 配置--应用市场--Search,输入gitlab,点击安装并记得重启
实现SAST
为什么要在gitlab做代码扫描:左移扫描的好处,尽早的发现代码层面的安全漏洞;
Gitlab + SonarQube实现代码扫描
见参考资料中SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测
# Gitlab Ci配置,java
sast:
stage: test
script:
- /home/gitlab-runner/sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner -Dsonar.host.url=http://10.10.10.5:9000 -Dsonar.login=49a54ada3dcf791ad2f31408fef67cafa2a19b4e -Dsonar.issuesReport.console.enable=True -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.java.binaries=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/bin/
tags:
- sec
only:
- master
效果图
如果你需要阻断,那么可以进行这么操作:
- 配置sonar质量阈;
- gitlab ci 判断 sonar的执行状态
if curl http://10.10.10.5:9000/api/qualitygates/project_status?projectKey=go-language: | grep 'ERROR'; then echo "error" exit 1; fi
这条命令加入到gitlab ci pipelines中,就可以实现阻断(不建议,sonar规则需要优化后再慢慢上线阻断功能)。
踩坑
- 连接阿里云RDS
sonar.jdbc.url=jdbc:mysql://address:3306/sonar?useUnicode=true&characterEncoding=utf8