Skip to content

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端口被占用,如果你直接访问,会出现

gitlab-1

解决方案是:修改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,点击安装并记得重启

sonarqube-1

实现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

效果图

sonarqube-2

如果你需要阻断,那么可以进行这么操作:

  • 配置sonar质量阈;
  • gitlab ci 判断 sonar的执行状态

sonarqube-3

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

参考资料

GitLab Installation

SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测

CentOS 7 安装 Jenkins