當前位置: 妍妍網 > 碼農

教你基於 Jenkins 搭建一套 CI/CD 系統

2024-06-26碼農

來源:安全隨筆

連結:https://mp.weixin.qq.com/s/KVc4IFky1z7kZn-7bz79DQ

一、 CI/CD 環境介紹

本次要實作如下效果,開發人員完成功能開發並送出程式碼到gitlab倉庫,jenkins自動完成拉取程式碼、編譯構建、程式碼掃描(sonarqube)、打包,再自動化完成部署到Tomcat伺服器提供存取。

環境準備三台Centos7.6機器:

伺服器
IP地址
配置
包含功能及版本
Gitlab
192.168.220.170 2核2G
Gitlab: 12.4.2 (393a5bdafa2)
Jenkins
192.168.220.172 2核2G

Jenkins:2.364

Maven:3.8.6

Sonarqube:7.9.6 (build 41879)

JDK:11.0.16

Git:1.8.3.1

Tomcat
192.168.220.173 2核2G

Tomcat:8.5.82

JDK:1.8.0_342

部署過程中踩過不少坑,這套Jenkins因為需要安裝較多外掛程式,而Jenkins上的外掛程式版本要求比較嚴格,所以最好實驗情況下直接安裝最新的Jenkins版本,這樣上面的外掛程式基本都能安裝,包括Pipeline、gitlab、SSH Server等。不然遇到Jenkins外掛程式安裝不順暢對新人挺麻煩的。

Jenkins安裝最新版,那JDK也必須11以上,那也就要求sonarqube也得7.8以上,三者之間都是有依賴關系的。

看下效果:

自動git拉取程式碼:

maven自動構建:

sonarqube自動掃描:

自動部署:

sonarqube掃描結果:

二、CI/CD平台搭建

1)安裝gitlab

1. 安裝相關依賴
yum -y install policycoreutils openssh-server openssh-clients postfix
2. 啟動ssh服務&設定為開機啟動
systemctl enable sshd && sudo systemctl start sshd
3. 設定postfix開機自啟,並啟動,postfix支持gitlab發信功能
systemctl enable postfix && systemctl start postfix
4. 開放ssh以及http服務,然後重新載入防火墻列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果關閉防火墻就不需要做以上配置
5. 下載gitlab包,並且安裝
線上下載安裝包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm
安裝:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
6. 修改gitlab配置
vi /etc/gitlab/gitlab.rb
修改gitlab存取地址和埠,預設為80,我們改為82
external_url 'http://192.168.220.170:82'
nginx['listen_port'] = 82
7. 多載配置及啟動gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
8. 把埠添加到防火墻
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
啟動成功後,看到以下修改管理員root密碼的頁面,修改密碼後,然後登入即可

添加組、建立使用者、建立計畫

這樣使用者zhangsan就擁有了itheima_group組的許可權。接下來使用zhangsan使用者進入組建立一個新的計畫,計畫名稱:hello_demo

該計畫倉庫地址是:

http://192.168.220.170:82/itheima_group/hello-demo.git

[email protected]:itheima_group/hello-demo.git

接下來將原生的maven工程程式碼上傳到gitlab倉庫,上傳成功後如下:

到這gitlab就準備好了!

2)安裝jenkins

1)安裝JDK
Jenkins需要依賴JDK,所以先安裝JDK11
yum install -y java-11-openjdk*
安裝目錄為:/usr/lib/jvm
2)獲取jenkins安裝包
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins
3)啟動Jenkinssystemctl start jenkins
4)開啟瀏覽器存取
http://192.168.220.172:8080
註意:本伺服器把防火墻關閉了,如果開啟防火墻,需要在防火墻添加埠
5)獲取並輸入admin帳戶密碼
cat /var/lib/jenkins/secrets/initialAdminPassword
6)跳過外掛程式安裝
因為Jenkins外掛程式需要連線預設官網下載,速度非常慢,而且經過會失敗,所以我們暫時先跳過外掛程式安裝

Jenkins安裝完成後,需要替換外掛程式更新源:需要執行以下步驟:

sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在Manage Jenkins -- Plungin Manager -- Update Site:將url替換為清華大學的url:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

送出後,在瀏覽器輸入:http://192.168.220.172.:8080/restart重新開機jenkins生效。

Jenkins準備好後,就是與gitlab整合,完成程式碼自動拉取的動作了。但是需要先準備如下:

安裝Credentials Binding外掛程式

要在Jenkins使用憑證管理功能,需要安裝Credentials Binding外掛程式,拉取gitlab程式碼需要使用憑證的方式拉取:

再去添加gitlab認證的憑證:

還要再jenkins伺服器上安裝git工具和git外掛程式:

在jenkins上準備一個計畫:

到這裏,jenkins拉取gitlab程式碼的準備條件都ok了。開始與gitlab整合吧。

保存,然後回到計畫點「 Build Now 」:

如上圖,jenkins自動去gitlab拉取程式碼,並且將程式碼工程放在如上路徑下:

好了,到這裏說明jenkins已經安裝成功了,也安裝了相關的外掛程式和配置了jenkins的基本配置,並且完成了與gitlab的整合,完成構建自動觸發程式碼拉取到本地。

3)部署Tomcat伺服器

把Tomcat壓縮包上傳到192.168.66.102伺服器
yum install java-1.8.0-openjdk* -y #安裝JDK(已完成)
tar -xzf apache-tomcat-8.5.47.tar.gz #解壓
mkdir -p /opt/tomcat #建立目錄
mv /root/apache-tomcat-8.5.47/* /opt/tomcat #移動檔
/opt/tomcat/bin/startup.sh #啟動tomcat

註意:伺服器已經關閉了防火墻,所以可以直接存取Tomcat啦,地址為:http://192.168.66.102/8080

tomcat已經部署成功!

4)配置jenkins與tomcat整合,完成CD持續部署功能

同樣的,也是需要在jenkins上做大量的配置:

Maven安裝和配置

tar -xzf apache-maven-3.6.2-bin.tar.gz #解壓
mkdir -p /opt/maven #建立目錄
mv apache-maven-3.6.2/* /opt/maven #移動檔

配置環境變量

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

Jenkins全域工具配置,關聯JDK和Maven

添加Jenkins全域變量

準備好後,來測試Maven構建是否生效,還是用剛剛的計畫:hello_web

可以看到,計畫構建成功。可以去伺服器上看到war包已經生成。

war可以自動編譯,還差自動部署了,有需要配置一些步驟:

安裝 Deploy to container外掛程式

添加Tomcat憑證

jenkins計畫配置構建後操作

保存配置,點「Build Now」:

可以看到計畫成功部署,可以正常存取。

<END>

點這裏👇關註我,記得標星呀~

感謝你的分享,點贊,在看三