sonarqube可以与源码管理工具gitlab集成,实现提交代码后自动扫描检测代码的相关漏洞。该CI/CD过程大致为:
1、研发人员提交源码至gitlab服务器 —>
2、gitlab runner执行指定脚本(由项目的.gitlab-ci.yml配置文件指定具体内容,如编译项目、开启代码检测) —>
3、sonar-scanner对项目进行扫描,sonar-scanner将扫描结果发送至服务器进行查看。
在上述过程3中,由于需要在gitlab服务器上通过sonar-scanner对项目进行编译,这就要求gitlab服务器能联网下载项目相关依赖包,否则只能提前将项目依赖包上传至gitlab服务器并在.gitlab-ci.yml的脚本中指定依赖包的本地位置。如果项目依赖发生变化,还得将新的依赖包上传服务器才能完成编译。因此在内网环境下,比较适合稳定没有太大变化的项目使用。且sonarqube社区版只支持主分支的检测,如果想要检测其他分支需要安装开发版或者企业版。以下记录gitlab、sonarqube的安装配置过程(centos内网环境)。
一、安装gitlab(社区版)、gitlab-runner
说明:gitlab-runner是gitlab ci自动化流水线的一个服务,主要作用是用于配合gitlab实现自动化执行相关动作,例如自动化的编译、部署、测试等
1、安装gitlab依赖项policycoreutils-python;
2、安装perl环境(有可能不需要,但是我安装时提示了,服务器没有perl);
3、安装git、安装gitlab;
4、修改gitlab的配置文件将external_url改成实际的服务器ip以及想要的端口号,如external_url 'http://172.18.88.45:8055'
5、执行命令gitlab-ctl reconfigure 重启gitlab服务(该过程会很久);
6、访问系统,使用root账号登录(初始密码在/etc/gitlab/initial_root_password里)、修改密码;
7、修改系统为中文:root账号-偏好设置-本地化里,语言选择中文即可(http://172.18.88.45:8055/-/profile/preferences)
8、安装gitlab-runner(网上有提到gitlab-runner的版本最好与gitlab保持一致,否则可能会有意外情况。我这边装的版本是一致的),修改服务配置文件,将用户改为root。默认是gitlab-runner,不改可能有权限问题;
vi /etc/systemd/system/gitlab-runner.service
ExecStart=/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root"
重启服务
systemctl daemon-reload
systemctl restart gitlab-runner
二、安装sonarqube(社区版)、sonar-scanner
说明:sonar-scanner主要租用是用于扫描指定代码漏洞,并将结果推送至sonarqube服务器保存查看。这两个一般安装在gitlab服务器上。
1、安装jdk11;
2、修改文件句柄数(最大文件数)和用户最大进程数限制;vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 655350
* hard nproc 655350
3、安装数据库,一般选择postgresql(以postgresql13为例);
a.#创建数据目录(位置自定)
mkdir -p /home/data/postgresql-13.0/
b.#修改目录的属主属组
chown postgres:postgres -R /home/data/postgresql-13.0/
c.#初始化pgsql
sudo -u postgres /usr/pgsql-13/bin/initdb --encoding=UTF-8 --username=postgres --pgdata=/home/data/postgresql-13.0/data
d.#记录配置文件路径
vi /home/data/postgresql-13.0/data/postgresql.conf
listen_addresses = '172.18.88.44' # what IP address(es) to listen on;
e.#定义哪些服务器、可以用什么样的方式,访问postgresql
/home/data/postgresql-13.0/data/pg_hba.conf
host all all 0.0.0.0/0 md5
f.#修改service文件中数据目录
vi /usr/lib/systemd/system/postgresql-13.service
Environment=PGDATA=/home/data/postgresql-13.0/data/
g.#重载服务
systemctl daemon-reload
h.#启动postgresql
systemctl start postgresql-13
systemctl enable postgresql-13
4、创建sonarqube使用的数据库和用户
psql -U postgres #连接数据库(此命令会用postgres用户,默认连入postgres数据库。-U指定用户 -d指定数据库)
#新建用户sonarqube,密码xxxxxx
create user sonarqube with password 'xxxxxx';
#创建数据库sonarqube_9_6并指定owner为sonarqube
create database sonarqube_9_6 with owner sonarqube;
#授权sonarqube用户在数据库sonarqube_9_6拥有所有权限
grant all on database sonarqube_9_6 to sonarqube;
5、安装sonarqube,修改配置文件
#创建用户sonar,因为sonarqube会用到ES,ES不能用root用户启动
useradd sonar
#解压包
unzip sonarqube-9.6.1.59531.zip
#修改目录的属主属组
chown -R sonar:sonar sonarqube-9.6.1.59531/
#修改配置文件,postgresql连接配置
sonar.jdbc.username=sonarqube
sonar.jdbc.password=xxxxxx
sonar.jdbc.url=jdbc:postgresql://xx.xx.xx.xx:5432/sonarqube_9_6
#端口配置
sonar.web.port=9000
6、启动sonarqube
sudo -u sonar /home/soft/sonarqube-9.6.1.59531/bin/linux-x86-64/sonar.sh start
7、汉化的话,可以
将下载好的汉化包(sonar-l10n-zh-plugin-9.6.jar)移动到插件目录下,然后重启一下sonarqube服务即可
/home/soft/sonarqube-9.6.1.59531/extensions/plugins/
8、安装sonar-scanner
a、修改配置文件(假设安装在/usr/local/sonar-scanner下)
vi /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://172.18.88.44:9000 #sonarqube服务器url
sonar.login=XXXXXXXXXX #在sonarqube里配置的令牌,后面会讲到在sonarqube里怎么配置
sonar.sourceEncoding=UTF-8 #Default source code encoding
b、修改系统配置文件,增加scanner的配置
vi /etc/profile
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
c、重载配置文件
source /etc/profile
d、查看sonar-scanner是否启动了
sonar-scanner -v
三、gitlab与sonarqube的集成
gitlab端:
1、选择具体想要启动CI/CD的项目-设置-CI/CD-Runner,创建令牌,用于gitlab-runner的身份认证
2、在命令行中执行 gitlab-runner register ,进行gitlab-runner的注册配置。按照提示,输入相关的gitlab服务地址、令牌token、唯一标识、描述等。全部完成之后,回到gitlab页面中,可以看到可用的指定Runner(上图中的CheckCode)。
修改runner,把运行未标记的作业勾上:
sonarqube端:
1、使用admin登录,配置-ALM-GitLab-创建配置,配置GitLab服务器的信息:
2、配置完毕后,就可以设置项目相关内容了:项目-新增项目-GitLab,选择需要从gitlab中进行分析的项目(会要求输入gitlab的令牌,用于访问gitlab上的项目。如果前面配置没问题,应该可以看到gitlab中的项目。注意,看到的项目范围跟你输入的gitlab令牌对应的用户权限有关系)
3、根据项目代码构建方式选择对应的技术:
4、按照提示创建sonarqube的令牌并在gitlab的ci/cd配置页面中建立对应的变量:
5、复制.getlab-ci.yml配置文件内容,完成教程,到gitlab对应的项目-ci/cd-编辑器中,粘贴对应的内容
注意:麻烦的(坑)地方来了,由于我们的服务器在内网无法访问互联网,所以默认的脚本需要修改不联网方式,同时需要安装项目对应的sonarscanner(本示例中,安装的是net版本的)、提前将项目依赖包上传到服务器并在脚本中指定位置,否则运行不起来:
windows下查看本地的nuget包位置命令:dotnet nuget locals all --list 需要将本地的package内容上传到服务器上。
完成后提交更改,就可以跑起来了。通过在代码端修改代码并提交gitlab,将会触发扫描任务:
到sonarqube管理页面中查看扫描结果:该项目没有安全漏洞,有2个bug
标签:postgresql,scanner,centos,runner,sonarqube,gitlab,sonar,内网 From: https://www.cnblogs.com/coldlight/p/17887082.html