基於Gitlab+Jenkins+SonarQube的代碼自動化審查方案

簡單說明:

  • SonarQube 是一個自動化的代碼審查工具,能夠方便的集成到常見的各種CI/CD中,實現對代碼變更後的自動化審查
  • 官方文檔:https://docs.sonarqube.org/7.9/
  • 環境需求:https://docs.sonarqube.org/7.9/requirements/requirements/
  • 本架構的集成方案是Gitlab上接收到代碼的push請求時,觸發Webhook調用Jenkins,由Jenkins調用sonar的scanner完成代碼審查

部署Gitlab:

  • 依據《CentOS7 gitlab安裝搭建簡單維護》部署Gitlab 192.168.77.100

部署Jenkins:

  • 依據《CentOS7 Jenkins部署 Maven項目構建測試》部署Jenkins 192.168.77.101

部署SonarQube:

  • 依據《CentOS7實驗機模板搭建部署》部署一臺實驗機 192.168.77.102
# 主機名和hosts文件
HOSTNAME=sonar
hostnamectl set-hostname "$HOSTNAME"
echo "$HOSTNAME">/etc/hostname
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ip a|grep "inet "|grep -v 127|awk -F'[ /]' '{print $6}') $HOSTNAME">>/etc/hosts
# jdk11環境
cd /usr/local
tar -xf /tmp/jdk-11.0.5_linux-x64_bin.tar.gz
chown root: /usr/local/jdk-11.0.5/ -R
echo 'export JAVA_HOME=/usr/local/jdk-11.0.5'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
java -version
  • 安裝數據庫
# PostgreSQL10 安裝
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum -y install postgresql10 postgresql10-server
/usr/pgsql-10/bin/postgresql-10-setup initdb
systemctl enable postgresql-10
systemctl start postgresql-10
# 設置庫用戶postgres密碼爲postgres,新建庫,用於sonar
su - postgres
psql -U postgres
ALTER USER postgres WITH PASSWORD 'postgres';
create database sonarqube owner postgres;
grant all on database sonarqube to postgres;
\q
exit
# 配置遠程放行
sed -i "s/^#listen_addresses =.*$/&\nlisten_addresses = '*'/gp" /var/lib/pgsql/10/data/postgresql.conf
sed -i 's|^# IPv4 local connections:.*$|&\nhost  all  all  0.0.0.0/0  md5|gp' /var/lib/pgsql/10/data/pg_hba.conf   
systemctl restart postgresql-10
  • 部署安裝 SonarQube 7.9 LTS
useradd sonar
echo 'sonar'|passwd --stdin sonar
cat >>/etc/security/limits.conf<<EOF
sonar soft nofile 65536
sonar hard nofile 65536
sonar soft nproc 4096
sonar hard nproc 4096
EOF
cat >>/etc/sysctl.d/99-sysctl.conf<<EOF
vm.max_map_count=262144
EOF
sysctl -p
sysctl -a|grep vm.max_map_count

cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
cd /usr/local/
unzip /tmp/sonarqube-7.9.1.zip
ln -s sonarqube-7.9.1 sonarqube
chown -R sonar: sonarqube-7.9.1
echo 'export SONAR_HOME=/usr/local/sonarqube'>>/etc/profile
echo 'export PATH=$SONAR_HOME/bin:$PATH'>>/etc/profile
source /etc/profile

cat >>/usr/local/sonarqube/conf/sonar.properties<<EOF
# 配置數據庫鏈接
sonar.jdbc.username=postgres
sonar.jdbc.password=postgres
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
# 修改 Elasticsearch 數據存儲目錄,該目錄需要考慮外掛存儲
sonar.path.data=/usr/local/sonarqube/data
sonar.path.temp=/usr/local/sonarqube/temp
# 配置監聽IP和端口以及URL子目錄
sonar.web.host=$(hostname -i)
sonar.web.port=9000
sonar.web.context=/
EOF

su - sonar
cd $SONAR_HOME/bin/linux-x86-64
./sonar.sh start
cd ../../logs/
# 瀏覽器訪問 http://192.168.77.102:9000 用戶名和密碼爲 admin/admin
# Administratorion ——> Marketplace ——> Plugins ——> Chinese Pack
# 一個是中文界面包,一個是java代碼分析插件,然後從界面上重啓sonarqube,刷新界面變中文了
# 安裝後通過頁面按鈕重啓Sonarqube

# 設置開機啓動
su -
echo 'su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"'>>/etc/rc.local

在這裏插入圖片描述


在Jenkins主機之上部署SonarQube Scanner:

  • 在jenkins中安裝插件:SonarQube Scanner
    在這裏插入圖片描述
  • 在jenkins主機之上安裝 SonarQube Scanner 部件,將其安裝到jenkins用戶之下
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
cd /usr/local/
unzip /tmp/sonar-scanner-cli-4.0.0.1744-linux.zip
ln -s sonar-scanner-4.0.0.1744-linux sonar-scanner
chown -R jenkins: sonar-scanner-4.0.0.1744-linux
echo 'export SONAR_SCANNER_HOME=/usr/local/sonar-scanner'>>/etc/profile
echo 'export PATH=$SONAR_SCANNER_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
cd $SONAR_SCANNER_HOME/conf
cat >>sonar-scanner.properties<<EOF
sonar.host.url=http://192.168.77.102:9000
sonar.sourceEncoding=UTF-8
EOF
sonar-scanner -h
  • 部署node工具
cd /tmp
wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz
mkdir -p /usr/local/lib/nodejs && cd /usr/local/lib/nodejs
tar -xf /tmp/node-v12.16.3-linux-x64.tar.xz
export PATH=/usr/local/lib/nodejs/node-v12.16.3-linux-x64/bin:$PATH
echo 'export PATH=/usr/local/lib/nodejs/node-v12.16.3-linux-x64/bin:$PATH'>>/etc/profile
node -v
npm version
npx -v
npm config set registry https://registry.npm.taobao.org
npm config get registry
npm install -g cnpm --registry=https://registry.npm.taobao.org
alias npm=cnpm
echo 'alias npm=cnpm'>>/etc/profile
  • 使用SonarQube Scanner手動掃描測試
su - jenkins
cd /tmp/
git clone [email protected]:root/test.git
cd test
cat >sonar-project.properties<<EOF
sonar.projectKey=test:project
sonar.projectName=test_project
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=java
sonar.java.binaries=/tmp
sonar.host.url=http://192.168.77.102:9000
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
EOF
sonar-scanner
# 網頁登錄Sonarqube,查看分析結果,因爲是一個空項目,因此沒有任何報錯信息

在這裏插入圖片描述


整合Jenkins和SonarQube:

  • 登錄jenkins,系統管理,全局安全配置,勾掉防止跨站點請求僞造
    在這裏插入圖片描述
  • 網頁登錄jenkins,系統管理,全局工具配置,SonarQube Scanner,將安裝的sonar-scanner配置上去
    在這裏插入圖片描述
  • 網頁登錄sonar,配置,權限,用戶,admin,令牌,創建令牌,並記錄token:2eee01966691aeeeb1bd6a55c43a410b9f081e44
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 網頁登錄jenkins,憑據,jenkins,全局憑據,添加憑據,Secret text類型,將上一步的token填入
    在這裏插入圖片描述
  • 網頁登錄jenkins,系統管理,系統設置,SonarQube servers,配置名字和url,選擇上一步添加的憑據
    在這裏插入圖片描述

配置Jenkins任務,掛接Gitlab勾子,觸發掃描測試:

  • 配置Jenkins任務
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 配置Gitlab的Webhook
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

[TOC]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章