Jenkins自動(dòng)化部署實(shí)現(xiàn)原理

一、Jenkins安裝
下載地址:https://www.jenkins.io/download/
(一)windows環(huán)境安裝
1.jenkins項(xiàng)目有兩條發(fā)布線,分別是LTS長(zhǎng)期支持版(或穩(wěn)定版)和每周更新版(最新版)。建議選擇LTS長(zhǎng)期支持版,下載通用java項(xiàng)目war包。

2.下載jdk11以上版本并安裝,安裝后配置jdk的環(huán)境變量(最新版jdk棄用了jdk1.8,改用jdk11以上)。

3.在dos命令行運(yùn)行命令解壓war包:java -jar jenkins.war (默認(rèn)情況下端口是8080,可通過命令行”java –jar Jenkins.war --httpPort=8083”的方式修改端口號(hào))
運(yùn)行命令后jenkins.war會(huì)自動(dòng)在C盤目錄下生成一個(gè)jenkins的文件夾。C盤下的這個(gè)文件夾可獨(dú)立運(yùn)行。
ps:運(yùn)行完后不要關(guān)閉dos窗口,否則會(huì)訪問不了Jenkins的頁面。

4.在瀏覽器中訪問jenkins項(xiàng)目:http://localhost:8083/jenkins 出現(xiàn)解鎖 Jenkins界面,說明jenkins項(xiàng)目搭建完成,這里需要輸入管理員密碼。如下圖:



5.上圖中有提示:管理員密碼在:C:\jenkins\secrets\initialAdminPassword 打開此文件獲得密碼并輸入密碼,點(diǎn)擊”繼續(xù)”按鈕后如下圖:

6.選擇插件來安裝,稍等幾分鐘安裝完插件就可以使用Jenkins了。

部分插件下載失敗不影響使用,今后需要用到的插件可在插件管理頁面進(jìn)行下載。
7.安裝完成后,頁面自動(dòng)進(jìn)入了管理員賬戶注冊(cè)頁面。
注冊(cè)完賬戶,就進(jìn)入主頁面

(二)Linux在線安裝
1.官方文檔安裝
(1)選擇下載CentOs版本

(2)頁面跳轉(zhuǎn)后按頁面提示步驟執(zhí)行

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install fontconfig java-11-openjdk
yum install jenkins
[root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
--2023-02-21 19:08:40-- https://pkg.jenkins.io/redhat-stable/jenkins.repo
Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ...
Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected.
ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to pkg.jenkins.io insecurely, use `--no-check-certificate'.
[root@localhost jenkins]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
--2023-02-21 19:09:52-- https://pkg.jenkins.io/redhat-stable/jenkins.repo
Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.2.133, 151.101.66.133, 151.101.130.133, ...
Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.2.133|:443... connected.
WARNING: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
HTTP request sent, awaiting response... 200 OK
Length: 85
Saving to: ‘/etc/yum.repos.d/jenkins.repo’
100%[===================================================================================================================>] 85 --.-K/s in 0s
2023-02-21 19:09:56 (4.73 MB/s) - ‘/etc/yum.repos.d/jenkins.repo’ saved [85/85]
系統(tǒng)中有jdk也需要執(zhí)行 yum install fontconfig java-11-openjdk 命令
[root@localhost jenkins]# yum install fontconfig java-11-openjdk
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
jenkins | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 19 MB 00:00:10
Package fontconfig-2.13.0-4.3.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9 will be installed
--> Processing Dependency: java-11-openjdk-headless(x86-64) = 1:11.0.18.0.10-1.el7_9 for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: libjvm.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: libjava.so()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: libgif.so.4()(64bit) for package: 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
--> Running transaction check
---> Package giflib.x86_64 0:4.1.6-9.el7 will be installed
---> Package java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9 will be installed
--> Processing Dependency: tzdata-java >= 2022g for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: copy-jdk-configs >= 3.3 for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: pcsc-lite-libs(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: lksctp-tools(x86-64) for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
--> Processing Dependency: javapackages-tools for package: 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64
---> Package xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 will be installed
--> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> Running transaction check
---> Package copy-jdk-configs.noarch 0:3.3-11.el7_9 will be installed
---> Package javapackages-tools.noarch 0:3.4.1-11.el7 will be installed
--> Processing Dependency: python-javapackages = 3.4.1-11.el7 for package: javapackages-tools-3.4.1-11.el7.noarch
---> Package lksctp-tools.x86_64 0:1.0.17-2.el7 will be installed
---> Package pcsc-lite-libs.x86_64 0:1.8.8-8.el7 will be installed
---> Package ttmkfdir.x86_64 0:3.0.9-42.el7 will be installed
---> Package tzdata-java.noarch 0:2022g-1.el7 will be installed
---> Package xorg-x11-font-utils.x86_64 1:7.5-21.el7 will be installed
--> Running transaction check
---> Package python-javapackages.noarch 0:3.4.1-11.el7 will be installed
--> Processing Dependency: python-lxml for package: python-javapackages-3.4.1-11.el7.noarch
--> Running transaction check
---> Package python-lxml.x86_64 0:3.2.1-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
java-11-openjdk x86_64 1:11.0.18.0.10-1.el7_9 updates 239 k
Installing for dependencies:
copy-jdk-configs noarch 3.3-11.el7_9 updates 22 k
giflib x86_64 4.1.6-9.el7 base 40 k
java-11-openjdk-headless x86_64 1:11.0.18.0.10-1.el7_9 updates 39 M
javapackages-tools noarch 3.4.1-11.el7 base 73 k
lksctp-tools x86_64 1.0.17-2.el7 base 88 k
pcsc-lite-libs x86_64 1.8.8-8.el7 base 34 k
python-javapackages noarch 3.4.1-11.el7 base 31 k
python-lxml x86_64 3.2.1-4.el7 base 758 k
ttmkfdir x86_64 3.0.9-42.el7 base 48 k
tzdata-java noarch 2022g-1.el7 updates 185 k
xorg-x11-font-utils x86_64 1:7.5-21.el7 base 104 k
xorg-x11-fonts-Type1 noarch 7.5-9.el7 base 521 k
Transaction Summary
=============================================================================================================================================================
Install 1 Package (+12 Dependent packages)
Total download size: 41 M
Installed size: 169 M
Is this ok [y/d/N]: y
Downloading packages:
(1/13): copy-jdk-configs-3.3-11.el7_9.noarch.rpm | 22 kB 00:00:00
(2/13): giflib-4.1.6-9.el7.x86_64.rpm | 40 kB 00:00:00
(3/13): javapackages-tools-3.4.1-11.el7.noarch.rpm | 73 kB 00:00:00
(4/13): lksctp-tools-1.0.17-2.el7.x86_64.rpm | 88 kB 00:00:00
(5/13): python-javapackages-3.4.1-11.el7.noarch.rpm | 31 kB 00:00:00
(6/13): pcsc-lite-libs-1.8.8-8.el7.x86_64.rpm | 34 kB 00:00:00
(7/13): java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64.rpm | 239 kB 00:00:01
(8/13): ttmkfdir-3.0.9-42.el7.x86_64.rpm | 48 kB 00:00:00
(9/13): tzdata-java-2022g-1.el7.noarch.rpm | 185 kB 00:00:00
(10/13): python-lxml-3.2.1-4.el7.x86_64.rpm | 758 kB 00:00:00
(11/13): xorg-x11-font-utils-7.5-21.el7.x86_64.rpm | 104 kB 00:00:00
(12/13): xorg-x11-fonts-Type1-7.5-9.el7.noarch.rpm | 521 kB 00:00:02
(13/13): java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64.rpm | 39 MB 00:01:12
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 580 kB/s | 41 MB 00:01:12
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : ttmkfdir-3.0.9-42.el7.x86_64 1/13
Installing : lksctp-tools-1.0.17-2.el7.x86_64 2/13
Installing : copy-jdk-configs-3.3-11.el7_9.noarch 3/13
Installing : pcsc-lite-libs-1.8.8-8.el7.x86_64 4/13
Installing : tzdata-java-2022g-1.el7.noarch 5/13
Installing : python-lxml-3.2.1-4.el7.x86_64 6/13
Installing : python-javapackages-3.4.1-11.el7.noarch 7/13
Installing : javapackages-tools-3.4.1-11.el7.noarch 8/13
Installing : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 9/13
Installing : giflib-4.1.6-9.el7.x86_64 10/13
Installing : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 11/13
Installing : xorg-x11-fonts-Type1-7.5-9.el7.noarch 12/13
Installing : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 13/13
Verifying : 1:xorg-x11-font-utils-7.5-21.el7.x86_64 1/13
Verifying : giflib-4.1.6-9.el7.x86_64 2/13
Verifying : xorg-x11-fonts-Type1-7.5-9.el7.noarch 3/13
Verifying : 1:java-11-openjdk-headless-11.0.18.0.10-1.el7_9.x86_64 4/13
Verifying : python-javapackages-3.4.1-11.el7.noarch 5/13
Verifying : python-lxml-3.2.1-4.el7.x86_64 6/13
Verifying : tzdata-java-2022g-1.el7.noarch 7/13
Verifying : pcsc-lite-libs-1.8.8-8.el7.x86_64 8/13
Verifying : javapackages-tools-3.4.1-11.el7.noarch 9/13
Verifying : 1:java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 10/13
Verifying : copy-jdk-configs-3.3-11.el7_9.noarch 11/13
Verifying : lksctp-tools-1.0.17-2.el7.x86_64 12/13
Verifying : ttmkfdir-3.0.9-42.el7.x86_64 13/13
Installed:
java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9
Dependency Installed:
copy-jdk-configs.noarch 0:3.3-11.el7_9 giflib.x86_64 0:4.1.6-9.el7 java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9
javapackages-tools.noarch 0:3.4.1-11.el7 lksctp-tools.x86_64 0:1.0.17-2.el7 pcsc-lite-libs.x86_64 0:1.8.8-8.el7
python-javapackages.noarch 0:3.4.1-11.el7 python-lxml.x86_64 0:3.2.1-4.el7 ttmkfdir.x86_64 0:3.0.9-42.el7
tzdata-java.noarch 0:2022g-1.el7 xorg-x11-font-utils.x86_64 1:7.5-21.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
Complete!
(3)將Jenkins存儲(chǔ)庫添加到系統(tǒng)中
[root@localhost jenkins]# sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
(4)創(chuàng)建Jenkins安裝時(shí)所需的文件目錄
安裝之前先準(zhǔn)備創(chuàng)建Jenkins安裝時(shí)所需的文件目錄,否則會(huì)導(dǎo)致安裝后啟動(dòng)失敗。

分別在 /var/cache/ /var/log/ /var/lib/ 下創(chuàng)建jenkins文件
[root@localhost java]# cd /var/cache/
[root@localhost cache]# mkdir jenkins
[root@localhost cache]# cd /var/log
[root@localhost log]# mkdir jenkins
[root@localhost log]# cd /var/lib
[root@localhost lib]# mkdir jenkins
(5)安裝Jenkins yum install jenkins
[root@localhost jenkins]# yum install jenkins
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package jenkins.noarch 0:2.190.3-1.1 will be updated
---> Package jenkins.noarch 0:2.375.3-1.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Updating:
jenkins noarch 2.375.3-1.1 jenkins 90 M
Transaction Summary
=============================================================================================================================================================
Upgrade 1 Package
Total download size: 90 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
jenkins-2.375.3-1.1.noarch.rpm | 90 MB 00:07:40
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : jenkins-2.375.3-1.1.noarch 1/2
warning: /etc/init.d/jenkins created as /etc/init.d/jenkins.rpmnew
warning: /etc/sysconfig/jenkins created as /etc/sysconfig/jenkins.rpmnew
Cleanup : jenkins-2.190.3-1.1.noarch 2/2
Verifying : jenkins-2.375.3-1.1.noarch 1/2
Verifying : jenkins-2.190.3-1.1.noarch 2/2
Updated:
jenkins.noarch 0:2.375.3-1.1
Complete!
(6)修改Jenkins配置文件
在啟動(dòng)之前對(duì)安裝完畢的Jenkins進(jìn)行默認(rèn)配置的修改:
默認(rèn)情況下Jenkins使用Jenkins用戶啟動(dòng),但安裝時(shí)并未創(chuàng)建用戶也并未賦予權(quán)限,所以將啟動(dòng)用戶修改為root
默認(rèn)端口為8080,常被占用,所以將默認(rèn)端口也做一下修改。
vi /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必須修改,否則權(quán)限不足
JENKINS_PORT="8083" ## 原值 "8080"

(7)啟動(dòng)Jenkins

4.在瀏覽器中訪問jenkins項(xiàng)目:http://server_ip:8083/jenkins 出現(xiàn)解鎖 Jenkins界面,說明jenkins項(xiàng)目搭建完成,這里需要輸入管理員密碼。如下圖:


5.上圖中有提示:管理員密碼在:/var/lib/jenkins/secrets/initialAdminPassword 打開此文件獲得密碼并輸入密碼,點(diǎn)擊”繼續(xù)”按鈕后如下圖:

6.選擇插件來安裝,稍等幾分鐘安裝完插件就可以使用Jenkins了。

部分插件下載失敗不影響使用,今后需要用到的插件可在插件管理頁面進(jìn)行下載。
7.安裝完成后,頁面自動(dòng)進(jìn)入了管理員賬戶注冊(cè)頁面。
注冊(cè)完賬戶,就進(jìn)入主頁面

(三)Jenkins系統(tǒng)配置
1.Global Tool Configuration
任務(wù)構(gòu)建所用到的編譯環(huán)境等配置,配置參考:





2. Configure System
(1)Gitee配置
在 鏈接名 中輸入 Gitee 或者你想要的名字
Gitee 域名 URL 中輸入碼云完整 URL地址: https://gitee.com (碼云私有化客戶輸入部署的域名)
證書令牌 中如還未配置碼云 APIV5 私人令牌,點(diǎn)擊 Add - > Jenkins
Domain 選擇 全局憑據(jù)
Kind 選擇 Gitee API 令牌
Scope 選擇你需要的范圍
Gitee API Token 輸入你的碼云私人令牌,獲取地址:https://gitee.com/profile/personal_access_tokens
ID, Descripiton 中輸入你想要的 ID 和描述即可。
Gitee鏈接配置保存后,創(chuàng)建新任務(wù)配置Gitee鏈接時(shí)在下拉框中選擇此任務(wù)所需的Gitee鏈接即可。

(2)SSH Server
接收文件的遠(yuǎn)程服務(wù)器配置

3.windows環(huán)境下更改默認(rèn)工作空間
增加環(huán)境變量JENKINS_HOME,指向想要更改的Jenkins默認(rèn)工作空間。比如,設(shè)置E:\jenkins為Jenkins的默認(rèn)工作目錄,那么在環(huán)境變量中,設(shè)置JENKINS_HOME為E:\jenkins。
再重啟jenkin即可。
(四)Jenkins卸載
1.centos7以下
sudo service jenkins stop
sudo service jenkins disable
sudo yum -y remove jenkins
sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
2.centos7以上
sudo systemctl stop jenkins
sudo systemctl disable jenkins
sudo yum -y remove jenkins
sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
二、Jenkins使用
(一)拉取遠(yuǎn)程倉庫代碼到本地
(1)新建文件夾便于項(xiàng)目管理首頁->新建Item->輸入文件夾名稱->選擇文件夾->點(diǎn)擊確定。


(2)在首頁進(jìn)入剛才新建的文件夾->新建Item->輸入任務(wù)名稱->選擇Freestyle project->點(diǎn)擊確定。


(3)頁面會(huì)跳轉(zhuǎn)到任務(wù)配置界面
General

源碼管理

保存應(yīng)用后,開始構(gòu)建:

當(dāng)看到控制臺(tái)輸出最近的提交記錄,則代表代碼成功被拉取到本地,Jenkins有自己的工作空間,拉取的代碼就保存在工作空間內(nèi)
(二)Jenkins編譯部署項(xiàng)目
1.源碼管理
代碼拉取步驟與上一節(jié)一致。
2.構(gòu)建觸發(fā)器
常用構(gòu)建觸發(fā)器
(1)定時(shí)觸發(fā)
定時(shí)構(gòu)建語法:* * * * * (五顆星,多個(gè)時(shí)間點(diǎn),中間用逗號(hào)隔開)第一個(gè)*表示分鐘,取值0~59第二個(gè)*表示小時(shí),取值0~23第三個(gè)*表示一個(gè)月的第幾天,取值1~31第四個(gè)*表示第幾月,取值1~12第五個(gè)*表示一周中的第幾天,取值0~7,其中0和7代表的都是周日
常用定時(shí)構(gòu)建舉例:
每5分鐘構(gòu)建一次:H/5 * * * *每15分鐘運(yùn)行一次:H/15 * * * *每30分鐘構(gòu)建一次:H/30 * * * *每2小時(shí)構(gòu)建一次:H H/2 * * *每天早上8點(diǎn)構(gòu)建一次:0 8 * * *每天中午下班前定時(shí)構(gòu)建一次:0 12 * * *每天下午下班前定時(shí)構(gòu)建一次:0 18 * * *每天的8點(diǎn),12點(diǎn),22點(diǎn),一天構(gòu)建3次:0 8,12,22 * * *一個(gè)小時(shí)的前30分鐘,每10分鐘運(yùn)行一次 (30分鐘, 可能在 4分,14分,24分):H(0-29)/10 * * * *每周一至周五,上午9:45到下午3:45,每隔2小時(shí)45分鐘運(yùn)行一次:45 9-15/2 * * 1-5每?jī)尚r(shí)一次,每個(gè)工作日上午9點(diǎn)到下午5點(diǎn)(也許是上午10:38,下午12:38,下午2:38,下午4:38):H H(9-17)/2 * * 1-5除12月外,每月1號(hào)和15號(hào)每天一次:H H 1,15 1-11 *
Build periodically
任務(wù)周期性進(jìn)行項(xiàng)目構(gòu)建,到達(dá)指定的時(shí)間必須觸發(fā)構(gòu)建任務(wù)(無論源碼數(shù)據(jù)有無變化,均執(zhí)行定時(shí)化的構(gòu)建),若朝九晚五各構(gòu)建一次,在Build periodically里設(shè)置如下

Poll SCM
定時(shí)檢查源碼變更(根據(jù)SCM軟件的版本號(hào)),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動(dòng)作(定時(shí)輪詢SVN,查看SVN中是否有數(shù)據(jù)變化,如果有變化,則執(zhí)行構(gòu)建任務(wù))若想每隔30分鐘檢查一次源碼變化,有變化就執(zhí)行,在poll SCM里設(shè)置如下


webhook觸發(fā)
構(gòu)建觸發(fā)器:


Gitee 配置

對(duì)內(nèi)網(wǎng)進(jìn)行映射


添加成功后會(huì)自動(dòng)產(chǎn)生一個(gè)請(qǐng)求,狀態(tài)碼為200即為成功。

添加成功,提交代碼后webhook觸發(fā)Jenkins自動(dòng)構(gòu)建
3.構(gòu)建步驟
打包項(xiàng)目

4.構(gòu)建后步驟
將打包編譯好的項(xiàng)目發(fā)送至遠(yuǎn)程服務(wù)器

應(yīng)用并保存后開始構(gòu)建,可在構(gòu)建完成后,在控制臺(tái)輸出查看結(jié)果

文件成功發(fā)送到遠(yuǎn)程服務(wù)器

(三)Jenkins Pipline流水線
采用Jenkins的自由風(fēng)格構(gòu)建項(xiàng)目時(shí),每個(gè)步驟都要通過不同的方式進(jìn)行配置,在構(gòu)建過程中整體流程并不可見。利用Jenkins流水線進(jìn)行項(xiàng)目從代碼拉取、構(gòu)建、測(cè)試、部署等步驟的構(gòu)建時(shí),相對(duì)于自由風(fēng)格和其他風(fēng)格更容易操作,流水線的構(gòu)建過程中可以看到整體流程,也可看到每個(gè)流程花費(fèi)的時(shí)間。
Jenkins的Pipline可以讓項(xiàng)目的發(fā)布整體流程可視化,明確執(zhí)行的階段,整個(gè)項(xiàng)目的生命周期可以通過Jenkins文件管理,且Jenkins文件可以放在項(xiàng)目中維護(hù)。
1.Jenkinsfile實(shí)現(xiàn)
將腳本內(nèi)容編寫到項(xiàng)目中的Jenkins文件中,每次構(gòu)建會(huì)自動(dòng)拉取項(xiàng)目并獲取項(xiàng)目中Jenkinsfile文件對(duì)項(xiàng)目進(jìn)行構(gòu)建。
(1)準(zhǔn)備Jenkinsfile
將Jenkinsfile文件上傳至項(xiàng)目中

Jenkinsfile基本語法
// 所有腳本命令包含在pipeline{}中
pipeline {
// 指定任務(wù)在哪個(gè)節(jié)點(diǎn)執(zhí)行(Jenkins支持分布式)
agent any
// 配置全局環(huán)境,指定變量名=變量值信息
environment{
host = 'ip'
}
// 存放所有任務(wù)的合集
stages {
// 單個(gè)任務(wù)
stage('任務(wù)1') {
// 實(shí)現(xiàn)任務(wù)的具體流程
steps {
echo 'do something'
}
}
// 單個(gè)任務(wù)
stage('任務(wù)2') {
// 實(shí)現(xiàn)任務(wù)的具體流程
steps {
echo 'do something'
}
}
// ……
}
}
流水線語法自動(dòng)生成
在配置流水線時(shí),點(diǎn)擊底部流水線語法,跳轉(zhuǎn)頁面后可選擇具體需要實(shí)現(xiàn)的流程步驟,自動(dòng)生成命令。

構(gòu)建項(xiàng)目:


實(shí)現(xiàn)文件上傳至遠(yuǎn)程服務(wù)器:

示例:
可指定構(gòu)建之前配置好的任務(wù),也可通過流水線語法自動(dòng)生成Groovy腳本在Jenkinsfile中配置。

Jenkins流水線是一種以定義的方式依次執(zhí)行Jenkins作業(yè)的方法,方法是將其編碼并在多個(gè)塊中進(jìn)行結(jié)構(gòu)化,這些塊可以包含多個(gè)任務(wù)步驟:

(2)配置Pipline



(四)Jenkins通過Junit插件在Jenkins中查看測(cè)試結(jié)果和趨勢(shì)
1.生成報(bào)告
Jenkins中安裝Junit插件
生成xml報(bào)告需要使用maven插件
只需要生成.xml、txt報(bào)告,使用maven-surefire-plugin插件,生成的報(bào)告在target的surefire-reports下
在項(xiàng)目的pom.xml中加載插件如下<plugins> </plugins>部分:
</distributionManagement>
<build>
<finalName>ROOT</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipTests>false</skipTests>>
</configuration>
</plugin>
</plugins>
</build>
</project>
若生成html報(bào)告,使用maven-surefire-report-plugin插件,生成的報(bào)告在target的site里面(surefire-report.html)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
maven-surefire-plugin和maven-surefire-report-plugin只需要配置其中一個(gè),就會(huì)在test階段執(zhí)行單元測(cè)試用例。
2.Jenkins pipeline Job配置
pipeline的這部分應(yīng)該放在post的always中,而不是stages段內(nèi)。防止單元測(cè)試失敗,pipeline不再執(zhí)行后續(xù)的stage,放在post的always中則確保會(huì)執(zhí)行。
Hop Jenkinsfile 示例
post {
always {
junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
}
}
3.Jenkins 項(xiàng)目配置
增加構(gòu)建后操作,添加Publish JUnit test result report

之后會(huì)在job頁面顯示單元測(cè)試的趨勢(shì)圖

hop單元測(cè)試結(jié)果趨勢(shì)圖
在Jenkins中也可查看失敗的單元測(cè)試



(五)Jenkins持續(xù)代碼質(zhì)量檢測(cè)
1.Maven與SonarQube集成
使用JUnit 4源碼來做示例。將JUnit 4從GitHub克隆下來后,在pom.xml中加入SonarQube插件依賴。
<build>
<plugins>
<plugin>
<groupId>org . codehaus . mojo</ groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.1.1168< /version>
</plugin>
</plugins>
</build>
執(zhí)行命令:mvn clean org.sonarsource.scanner.maven
3.4.1.1168:sonar -Dsonar.host.url=http://127.0.0.1:9000
sonar.host.url參數(shù)用于指定SonarQube服務(wù)的地址。這時(shí),就可以在SonarQube的”Projects” 中看到JUnit 4的分析結(jié)果,可以看到JUnit 4有11個(gè)Bug。

SonarQube服務(wù)默認(rèn)允許任何人執(zhí)行源碼分析,因此在生產(chǎn)環(huán)境中使用會(huì)有安全隱患,以下幾步可以提高其安全性:(1)設(shè)置SonarQube禁止非登錄用戶使用

(2)為用戶生成Token,Jenkins只能通過Token與SonarQube集成。登陸SonarQube,進(jìn)入個(gè)人設(shè)置頁面中的Security tab頁

2Jenkins與SonarQube集成
(1)Jenkins安裝SonarQube Scanner插件
(2)Jenkins配置SonarQube Scanner插件

(3)SonarQube設(shè)置Webhooks,不同代碼規(guī)模的源碼,分析過程的耗時(shí)是不一樣的。所以當(dāng)分析完成時(shí),由SonarQube主動(dòng)通知Jenkins。設(shè)置方法就是進(jìn)入SonarQube的Adminstration -》Configuration -》 Webhooks頁 ,加入http://jenkins地址/sonarqube-webhook 這個(gè)接口地址由SonarQube插件提供

(4)在Jenkinsfile中加入SonarQube的stage
pipeline {
angent any
tools {
maven ' mvn- -3.5.4
}
stages {
stage( 'Code Analysis') {
steps {
withSonarQubeEnv(' sonarqube') {
sh """
mvn clean package org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar \
-Dsonar.host.url=${SONAR_ HOST_ URL} \
-Dsonar.login=${ SONAR_ AUTH_ TOKEN}
"""
}
}
}
stage("Quality Gate" ) {
steps {
timeout(time: 1, unit: 'HOURS') {
waitForQualityGate abortPipeline: true
}
}
}
}
}
withSonarQubeEnv是一個(gè)環(huán)境變量包裝器,讀取的是配置的變量。在它的閉包內(nèi),可以使用以下變量。
SONAR_HOST_URL : SonarQube服務(wù)的地址
SONAR_AUTH_TOKEN : SonarQube認(rèn)證所需要的Token
waitForQualityGate步驟告訴Jenkins等待SonarQube返回的分析結(jié)果。當(dāng)它的abortPipeline參數(shù)為true時(shí),代表當(dāng)質(zhì)量不合格,將pipeline的狀態(tài)設(shè)置為UNSTABLE。
同時(shí)使用了timeout包裝器來設(shè)置waitForQualityGate步驟的超時(shí)時(shí)間,避免當(dāng)網(wǎng)絡(luò)出問題時(shí), Jenkins任務(wù)-直處于等待狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-469906.html
(5)設(shè)置Quality Gates(質(zhì)量閾值)。 在SonarQube的”Quality Gates”下,可以看到系統(tǒng)自帶的質(zhì)量閾值。它是針對(duì)新代碼的。所以,在初次及沒有新代碼加入的情況下,執(zhí)行代碼分析是不會(huì)報(bào)出構(gòu)建失敗的。文章來源地址http://www.zghlxwxcb.cn/news/detail-469906.html
到了這里,關(guān)于Jenkins自動(dòng)部署Maven項(xiàng)目詳細(xì)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!