天天看點

Centos Gitlab+Jenkins+SonarQube實作持續內建以及代碼審計環境搭建

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=""更新為:

配置了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 [email protected]'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,安裝插件就可

Centos Gitlab+Jenkins+SonarQube實作持續內建以及代碼審計環境搭建

一些問題

如果下載下傳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/

繼續閱讀