Jenkins結合Gitlab+SonarQube+Maven進行代碼管理、編譯構建以及代碼質量檢測全流程


第0章 環境准備

主機名 外網IP 內網IP 內存/磁盤
gitlab 10.0.1.200 172.16.1.200 1C2G/20G
jenkins 10.0.1.201 172.16.1.201 1C1G/20G
nexus 10.0.1.202 172.16.1.202 1C2G/20G
sonar 10.0.1.203 172.16.1.203 1C4G/20G
web 10.0.1.7 172.16.1.7 1C1G/20G

第一章 安裝部署Jenkins

0.Gitlab部署過程及使用參考

https://www.pingface.com/archives/git.html
https://www.pingface.com/archives/gitlab.html
https://www.pingface.com/archives/gitlabusage.html

1.安裝Jenkins

# 安裝 jdk
$ rpm -ivh jdk-8u181-linux-x64.rpm 
# 安裝 jenkins
$ rpm -ivh jenkins-2.176.1-1.1.noarch.rpm 
這里的 jenkins 也可從清華鏡像源下載指定版本:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/。

2.安裝完成后jenkins生成的主要目錄如下

/usr/lib/jenkins/:jenkins 安裝目錄,war 包也在這里;
/etc/sysconfig/jenkins:jenkins 配置文件,端口、JENKINS_HOME 可在此處配置;
/var/lib/jenkins/:默認的 JENKINS_HOME;
/var/log/jenkins/jenkins.log:Jenkins 日志文件;

3.配置jenkins使用root用戶身份運行

$ vim /etc/sysconfig/jenkins
JENKINS_USER="root"

4.解壓離線插件到到/var/lib/jenkins/plugins 目錄

$ tar xf jenkins_plugins.tar.gz -C /var/lib/jenkins

5.啟動Jenkins

$ systemctl start jenkins
啟動完成后會監聽 8080 端口。

6.切換插件國內源

編輯/var/lib/jenkins/hudson.model.UpdateCenter.xml 文件,將 https://updates.jenkins.io/update-center.json 修改為 https://mirrors.huaweicloud.com/jenkins/updates/update-center.json。
上面使用的是華為源,還有清華源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json。

7.使用瀏覽器訪問

image.png
image.png

8.修改密碼

image.png

第二章 簡單構建一個小項目

要求構建完成后,輸出Jenkins的工作目錄。

1.新建任務並保存

image.png
image.png
image.png

2.添加構建步驟並保存

image.png
image.png

3.點擊立即構建

image.png

4.查看控制台輸出

image.png
image.png

第三章 發布Gitlab中的靜態代碼

由於 jenkins 主機要通過 git 從 gitlab 拉取代碼,所以要保證 jenkins 主機能正常免密從gitlab拉取到代碼,需要安裝好git,還需要將jenkins主機的ssh公鑰添加到gitlab.

1.下載測試用的html工程

https://gitee.com/kangjie1209/monitor」手動提交到 gitlab,或直接按如下操作將其導入 gitlab
image.png

2.在jenkins中關聯gitlab中的monitor項目

這一步成功的前提是 jenkins 主機的公鑰要配置到gitlab中,否則會因權限不足拉取不到gitlab中的代碼

image.png

3.點擊立即構建,檢查jenkins主機的工作目錄是否拉取到了gitlab中的代碼

image.png

$ ll /var/lib/jenkins/workspace/My_FreeStyle_Job/|wc -l

4.編寫部署腳本

$ cat /scripts/jenkins/deploy_monitor.sh 
#!/bin/bash
#
webserver_ip='10.0.1.7'
code_dir="${WORK_SPACE}"
web_code_dir="/code/monitor-${BUILD_ID}/"

# 打包 jenkins 主機拉取到的代碼
cd $code_dir
tar zcf /tmp/monitor_code.tar.gz ./*

# 拷貝打包后的代碼包到 web 主機的站點目錄
scp /tmp/monitor_code.tar.gz root@${webserver_ip}:/tmp

# 解壓 web 主機中的代碼包並創建軟鏈接
ssh root@$webserver_ip "mkdir ${web_code_dir} -p && cd /tmp && tar xf monitor_code.tar.gz -C ${web_code_dir} && cd /code/ && rm -rf monitor && ln -s ${web_code_dir} monitor"
上述腳本中的 ${WORK_SPACE} 和 ${BUILD_ID} 是 jenkins 的內置參數:
- ${WORK_SPACE} 是當前構建工程在 jenkins 主機中的工作目錄,在上述示例中的值就是 /var/lib/jenkins/workspace/freestyle-prj;
- ${BUILD_ID} 是構建歷史的序列號;
jenkins 中可使用的內置變量可通過 http://<jenkins 主機地址>/env-vars.html 查看。

5.修改jenkins構建時執行上述腳本

image.png

6.配置Web主機的Nginx虛擬主機

$ mkdir /code/
$ cat /etc/nginx/conf.d/web.conf 
server {
        listen 80;

        location / {
                root /code/monitor/;
        }
}

7.測試立即構建freestyle-prj,檢查web主機的站點目錄

$ ll /code
  lrwxrwxrwx 1 root  root    16 Apr 17 11:59 monitor -> /code/monitor-2/

8.測試訪問

image.png

第四章 監聽Gitlab自動觸發構建

1. Jenkins項目中添加構建觸發器,生成Secret token

image.png
image.png

2.在gitlab中添加webhook,復制上一步生成的Secret token和webhook URL到 gitlab

image.png

3.測試觸發Push事件,如果成功觸發jenkins對應的項目則會自動構建,如果成功則頁面頂部將會返回HTTP 200狀態碼

image.png
image.png
此時如果通過git push代碼到倉庫時,jenkins就會自動構建並發布了。

第五章 參數化構建

1.配置參數化構建

image.png
image.png

2.打兩個標簽並提交

# 修改代碼,打個 V1.0 標簽
...
$ git commit -am 'v1.0'
$ git tag -a v1.0 -m 'v1.0 穩定版' 
$ git push -u origin v1.0

# 再次修改代碼,打個 v2.0 標簽
...
$ git commit -am 'v2.0'
$ git tag -a v2.0 -m 'v2.0 穩定版'        
$ git push -u origin v2.0

3.此時jenkins可以獲取到gitlab中對應項目的所有標簽

image.png

4.選中一個 tag,點擊開始構建,就會拉取選中的tag版本代碼進行發布。

5.修改發布腳本防止重復構建

$ cat /scripts/jenkins/deploy_monitor.sh 
#!/bin/bash
#
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
        echo "monitor-${BUILD_ID} 已部署,不允許重復構建"
        exit
fi

webserver_ip='10.0.1.7'
code_dir="${WORKSPACE}"
web_code_dir="/code/monitor-${BUILD_ID}/"

# 打包 jenkins 主機拉取到的代碼
cd $code_dir
tar zcf /tmp/monitor_code.tar.gz ./*

# 拷貝打包后的代碼包到 web 主機的站點目錄
scp /tmp/monitor_code.tar.gz root@${webserver_ip}:/tmp

# 解壓 web 主機中的代碼包並創建軟鏈接
ssh root@$webserver_ip "mkdir ${web_code_dir} -p && cd /tmp && tar xf monitor_code.tar.gz -C ${web_code_dir} && cd /code/ && rm -rf monitor && ln -s ${web_code_dir} monitor"

此時如果重復構建相同的tag版本在jenkins控制台會輸出不允許重復構建。

第六章 指定參數發布或回滾版本

1.配置添加選項參數

image.png

2.查看參數化構建

image.png

3.打標簽

# 修改代碼,打個 v3.0 4.0 5.0標簽
...
$ git commit -am 'v3.0'
$ git tag -a v3.0 -m 'v3.0 穩定版'       
$ git push -u origin v3.0
# 修改代碼,打個 v4.0 標簽
...
$ git commit -am 'v4.0'   
$ git tag -a v4.0 -m 'v4.0 穩定版'     
$ git push -u origin v4.0

4.修改腳本

$ cat /scripts/jenkins/deploy_monitor.sh 
#!/bin/bash
#

webserver_ip='10.0.1.7'
code_dir="${WORKSPACE}"
web_code_dir="/code/monitor-${git_version}/"

deploy(){
        # 打包 jenkins 主機拉取到的代碼
        cd $code_dir
        tar zcf /tmp/monitor_code.tar.gz ./*

        # 拷貝打包后的代碼包到 web 主機的站點目錄
        scp /tmp/monitor_code.tar.gz root@${webserver_ip}:/tmp

        # 解壓 web 主機中的代碼包並創建軟鏈接
        ssh root@$webserver_ip "mkdir ${web_code_dir} -p && cd /tmp && tar xf monitor_code.tar.gz -C ${web_code_dir} && cd /code/ && rm -rf monitor && ln -s ${web_code_dir} monitor"
}
if [ "$deploy_env" == "deploy" ];then
        if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
                echo "monitor-${BUILD_ID} 已部署,不允許重復構建"
                exit
        fi
        deploy
else
        ssh root@$webserver_ip "cd /code/ && rm -rf monitor && ln -s ${web_code_dir} monitor"
fi

5.先構建v3.0,然后構建v4.0 v5.0

6.此時如果要回滾到v3.0,只需要選中v3.0,並在下拉框選中rollback

image.png

7.刷新web頁面查看版本信息。

第七章 自動打標簽項目

1.創建一個打標簽工程

image.png

2.配置工程參數如下

image.png

3.添加構建shell

image.png

4.輸入要打的標簽名稱,點擊立即構建即可自動打標簽

image.png

第八章 代碼質量檢測SonarQube

1.安裝部署mysql

參考:https://www.pingface.com/archives/mysql57

  1. SonarQube基礎java開發,需安裝open JDK8版本
  2. SonarQube需要依賴MySQL數據庫,至少5.6版本以上
  3. SonarQube的小型實例至少4G內存,如果大型實例需要16G內
# 安裝好數據庫之后需要創建sonar數據庫
create database sonar DEFAULT CHARACTER SET utf8;

2.安裝部署sonarqube服務端

  • 安裝sonarqube
下載地址:https://www.sonarqube.org/downloads/ 
$ unzip sonarqube‐7.0.zip  
$ mv sonarqube‐7.0 /usr/local/  
$ ln ‐s /usr/local/sonarqube‐7.0/ /usr/local/sonarqube  
$ useradd sonar  
$ chown ‐R sonar.sonar /usr/local/sonarqube‐7.0/ 
  • 配置sonar連接本地數據庫
vim /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root  
sonar.jdbc.password=lizhenya123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewrieBatchedStatements=true&useConfigs=maxPerformanc e&useSSL=false 
  • 使用普通用戶啟動sonarqube
$ su ‐ sonar ‐c "/usr/local/sonarqube/bin/linux‐x86‐64/sonar.sh start"
# 等幾十秒后查看9000端口是否監聽
$ netstat -lntup|grep java
  • 瀏覽器訪問
啟動后的端口為9000使用瀏覽器直接訪問http://10.0.0.203:9000/about 
用戶名admin 密碼admin  
生成一個token,只顯示一次,記錄好.
jenkins: 7559e4be476a7bc9b52f0682a097381f790b0f3e
  • 配置sonarqube檢測html代碼
    image.png
    image.png
    image.png
    image.png
  • 配置管理sonar安裝插件
1.安裝中文漢化插件  
在頁面上找到administrator > Marketplace > 搜索框 chinese,出現一個 chinese pack 然后點擊install,安裝完點擊 restart 重啟生效  
2.默認已安裝C JAVA Python PHP JS 等代碼質量分析工具,如果一個項目使用了JAVA CSS JS HTML,默認情況下sonar 只會檢測JAVA,JS等代碼的漏洞和bug,如果安裝了HTML、CSS等插件,則會檢測該項目代碼中JAVA JS HTML CSS代碼的漏洞和bug
2.手動安裝插件
$ mv /usr/local/sonarqube/extensions/plugins /usr/local/sonarqube/extensions/plugins_bak 
$ rz ‐bye plugins.tar.gz  
$ tar xf plugins.tar.gz ‐C /usr/local/sonarqube/extensions 
$ chown -R sonar.sonar /usr/local/sonarqube/extensions/plugins  
$ su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"

3.在Jenkins服務器上部署sonarqube客戶端

jenkins服務器測試推送html代碼至SonarQube檢測
客戶端其他版本下載地址搜索對應版本 例如:SonarScanner 4.0
https://docs.sonarqube.org/7.9/analysis/scan/sonarscanner/

$ rz -byte sonar-scanner-cli-4.0.0.1744-linux.zip
$ unzip sonar-scanner-cli-4.0.0.1744-linux.zip
$ mv sonar-scanner-4.0.0.1744-linux sonar-scanner-4.0.0.1744
$ ln -s /opt/src/sonar-scanner-4.0.0.1744 /usr/local/sonar-scanner
$ cd /usr/local/sonar-scanner
$ echo "export PATH=$PATH:/usr/local/sonar-scanner/bin" >> /etc/profile
$ source /etc/profile
$ vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://10.0.1.203:9000
sonar.login=7559e4be476a7bc9b52f0682a097381f790b0f3e
sonar.sourceEncoding=UTF-8

4.sonarqube客戶端推送代碼

# 進入代碼目錄
$ cd /var/lib/jenkins/workspace/My_FreeStyle_Job/
# 推送代碼
$ sonar-scanner -Dsonar.projectKey=html -Dsonar.sources=.
# 出現如下提示表示代碼推送成功
`INFO: EXECUTION SUCCESS`

4.sonarqube服務端查看代碼質量檢測結果

image.png
image.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM