Gitlab的安装方式请参考我之前的一篇文章(Centos7 YUM安装GitLAB环境),本篇文章具体主要参照这篇文章https://bloodzer0.github.io/ossa/other-security-branch/devsecops/gjs/
系统环境Centos 7.6.1810
首先解决端口冲突,因为我们要安装jenkins,会占用8080端口,只能修改gitlab的8080端口。
# 修改配置文件
# 修改监听文件
vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
listen "127.0.0.1:8081", :tcp_nopush => true # 原本为:listen "127.0.0.1:8080", :tcp_nopush => true
# 重启服务
gitlab-ctl restart
配置Gitlab-Runner
Gitlab-Runner是Gitlab CI的一个组件是配合GitLab CI进行构建任务的应用程序,GitLab CI负责yml文件中各种阶段流程的执行,而GitLab Runner就是具体的负责执行每个阶段的脚本执行,一般来说GitLab Runner需要安装在单独的机器上通过其提供的注册操作跟GitLab CI进行绑定,当然,你也可以让其和GitLab安装在一起,只是有的情况下,你代码的构建过程对资源消耗十分严重的时候,会拖累GitLab给其他用户提供政策的Git服务。
具体方法参考https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-runner/,建议搭建收藏清华大学的开源镜像站,里面有很多资源用国外的链接太慢,但是更换成清华的yum源感觉就不一样了(当然除了清华的源还有其他很多国内的源,例如阿里,网易等)。
#新建 /etc/yum.repos.d/gitlab-runner.repo,内容为
[gitlab-runner]
name=gitlab-runner
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
#再执行
sudo yum makecache
sudo yum install gitlab-runner
配置Jenkins
# 下载Jenkins,这里可以去官网查看最新版的链接进行下载
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.176.3-1.1.noarch.rpm
rpm -ivh jenkins-2.176.3-1.1.noarch.rpm
# 安装java环境
yum install java
# 启动jenkins
systemctl start jenkins.service
# 防火墙打开8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
访问8080端口初始化jenkins,安装默认插件(当然你也可以将后续我们要安装的SonarQube Scanner插件装上),jenkins的初始化需要很注意,如果配置不对很可能造成登录不显示网页
配置Jenkins https
如果不需要则可以跳过
首选需要一个jks的证书,可以参考我上一篇文章申请的本地证书,然后通过下面命令转换成jks证书
openssl pkcs12 -export -out test.pfx -inkey localhost.key -in localhost.crt
keytool -importkeystore -srckeystore test.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS
keytool -importkeystore -srckeystore server.jks -destkeystore server.jks -deststoretype pkcs12
然后更改jenkins配置
将 /etc/sysconfig/jenkins 的最后一行JENKINS_ARGS=""更新为:
JENKINS_ARGS=" --httpsPort=8443 --httpsKeyStore=/var/lib/jenkins/server.jks --httpsKeyStorePassword=xxx --httpsPrivateKeyPassword=xxx --httpPort=-1"
配置了https访问的端口就不再是8080而是8443
配置SonarQube
# 下载SonarQube(需要注意sonarqube在7.9版本需要java 11+并且不支持mysql,这里选择使用7.8版本)
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
# 解压
unzip sonarqube-7.8.zip
解压过后把sonarqube放在你想放的位置。
然后进行数据库mysql的安装。
yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum -y install mysql mysql-devel mysql-server mysql-utilities
配置数据库
#创建用户sonar密码sonar
create user 'sonar'@'localhost' identified BY 'sonar';
# 创建数据库
create database sonar default character set utf8 collate utf8_general_ci;
# 授权
grant all on sonar.* to sonar@'localhost';
更改SonarQube配置文件,在/sonarqube-7.8/conf/下sonar.properties
# 配置数据库连接信息
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
添加sonar用户,由于SonarQube集成了elasticsearch,不能使用root进行启动
# 添加用户
useradd sonar
# 设置密码
passwd sonar
启动SonarQube
# 在sonarqube-7.8文件夹下的bin/linux-x86-64下
./sonar.sh start
访问9000端口即可
配置sonar-scan
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
unzip sonar-scanner-cli-4.0.0.1744-linux.zip
将sonar-scanner放在之前sonar文件夹
配置path
ln -s sonar-scanner-cli-4.0.0.1744-linux sonar-scanner
vim /etc/profile
export PATH=$PATH:/INSTALL/sonar/PATH/sonar-scanner/bin
source /etc/profile
sonar连接Gitlab
下载wget https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/3.0.2/sonar-gitlab-plugin-3.0.2.jar
放在sonar文件夹的/extensions/plugins然后访问sonar在插件里面搜索git,安装插件就可
一些问题
如果下载SonarQube7.9的版本还需要下载java 11+的版本,一般会报错
WrapperSimpleApp: Encountered an error running main: java.lang.IllegalStateException: SonarQube requires Java 11+ to run
java.lang.IllegalStateException: SonarQube requires Java 11+ to run
下载jdk 12地址
https://download.java.net/java/GA/jdk12.0.2/e482c34c86bd4bf8b56c0b35558996b9/10/GPL/openjdk-12.0.2_linux-x64_bin.tar.gz
有时候es会报错,所以不能用root进行启动
还有个问题是SonarQube7.9不支持mysql,只能换其他的数据库
如果配置完成提交代码是报这个错误[remote rejected] master -> master (pre-receive hook declined)
原因是因为/opt/gitlab/embedded/service/gitlab-shell/config.yml这个里面的端口和你修改的端口不一致,改成一致的就好了。
参考文档:
https://www.jianshu.com/p/b92add446d4e
https://bloodzer0.github.io/ossa/other-security-branch/devsecops/gjs/