網(wǎng)站建設(shè)簡(jiǎn)介聯(lián)系方式哪家建設(shè)公司網(wǎng)站
Jenkins自動(dòng)化部署入門(mén)
一、簡(jiǎn)介
Jenkins是一個(gè)開(kāi)源軟件項(xiàng)目,是基于Java開(kāi)發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開(kāi)放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。
Jenkins自動(dòng)化部署實(shí)現(xiàn)原理
二、Jenkins部署環(huán)境
基本環(huán)境:
1.jdk環(huán)境,Jenkins是java語(yǔ)言開(kāi)發(fā)的,因需要jdk環(huán)境。
2.git/svn客戶端,因一般代碼是放在git/svn服務(wù)器上的,我們需要拉取代碼。
3.maven客戶端,因一般java程序是由maven工程,需要maven打包,當(dāng)然也有其他打包方式,如:gradle
以上是自動(dòng)化部署java程序jenkins需要的基本環(huán)境,請(qǐng)自己提前安裝好,下面著重講解Jenkins的安裝部署配置。
Jenkins安裝
1.下載安裝包jenkins.war; Jenkins官網(wǎng)
IT之家 7 月 2 日消息,開(kāi)源 Devops 工具 Jenkins 在官方博客平臺(tái)宣布,從 6 月 28 日發(fā)布的 Jenkins 2.357 和將于 9 月發(fā)布的 LTS 版本開(kāi)始,Jenkins 需要 Java 11 才能使用,將放棄 Java 8。
2.在安裝包根路徑下,運(yùn)行命令 java -jar jenkins.war --httpPort=8080,(linux環(huán)境、Windows環(huán)境都一樣);
3.打開(kāi)瀏覽器進(jìn)入鏈接 http://localhost:8080.
4.填寫(xiě)初始密碼,激活系統(tǒng)
重新安裝:可以把.jenkins 文件刪掉,注意之前的配置會(huì)丟失
5.進(jìn)入插件安裝選擇
這里建議選擇,推薦安裝的插件,保證基本常用的功能可以使用。
有時(shí)候網(wǎng)絡(luò)有問(wèn)題會(huì)安裝失敗,重新安裝就好,但是如果版本太低就需要更新版本才能安裝插件了
Jenkins 插件安裝失敗解決辦法
6.設(shè)置初始用戶和密碼
7.進(jìn)入系統(tǒng),安裝完成
三、Jenkins基本配置
Configure System (系統(tǒng)設(shè)置)
Jenkins設(shè)置中文
一、下載Locale插件
1.點(diǎn)擊【Manage Jenkins】->【Manage Plugins】選項(xiàng)。
2.點(diǎn)擊【可選插件】選項(xiàng),右側(cè)輸入【Locale】選項(xiàng)。
3.勾選【插件選項(xiàng)】,點(diǎn)擊【直接安裝】選項(xiàng)。
4.重啟Jenkins:在URL后加上【/restart】,點(diǎn)擊【回車(chē)】,點(diǎn)擊【是】即可。
二、設(shè)置為中文
1.點(diǎn)擊【Manage Jenkins】->【Configure System】選項(xiàng)。
2.找到【Locale】選項(xiàng),輸入【zh_CN】,勾選下面的選項(xiàng),最后點(diǎn)擊【應(yīng)用】即可。
在系統(tǒng)設(shè)置這里,我們只需要設(shè)置最后面的一項(xiàng),配置遠(yuǎn)程服務(wù)器地址,即我們代碼最終運(yùn)行的服務(wù)器地址信息,就像我們之前手動(dòng)部署時(shí)使用xshell登錄Linux服務(wù)器一樣,當(dāng)然這里是可以配置多臺(tái)遠(yuǎn)程Linux服務(wù)器的,配置完成后點(diǎn)擊保存即可,為后面我們配置自動(dòng)化部署做準(zhǔn)備,配置如下圖
Configure Global Security (全局安全配置)
配置用戶相關(guān)的權(quán)限
Global Tool Configuration (全局工具配置 )
a.配置maven的全局settings路徑
b.配置jdk
c、 配置git
d、配置maven
e、安裝必要插件
主要是檢查如下這兩個(gè)插件是否已安裝
插件1:Publish over SSH
插件2:Deploy to container Plugin
安裝Publish Over SSH和SSH plugin兩個(gè)插件
Publish Over SSH插件是用來(lái)傳輸文件的,可以Jenkins服務(wù)器上編譯后的文件到應(yīng)用服務(wù)器上,SSH plugin插件為遠(yuǎn)程執(zhí)行shell命令的插件,可在遠(yuǎn)程服務(wù)器上執(zhí)行停服務(wù),刪日志等操作
四、Jenkins自動(dòng)化部署(springBoot+maven+gitHub)項(xiàng)目
大體步驟:General(基礎(chǔ)配置)–》源碼管理–》構(gòu)建觸發(fā)器–》構(gòu)建環(huán)境–》構(gòu)建–》構(gòu)建后操作
1.創(chuàng)建一個(gè)工程
2.General(基礎(chǔ)配置)
僅需填寫(xiě)標(biāo)準(zhǔn)部分,其他可不填寫(xiě)
3.源碼管理
上圖中點(diǎn)擊“添加”按鈕添加一組賬號(hào)和密碼
4.構(gòu)建觸發(fā)器
如上圖:當(dāng)前項(xiàng)目的回調(diào)地址為:
http://localhost:8080/job/jenkinsSpringBootDemo/build?token=token_demo2
只要執(zhí)行這個(gè)地址(在瀏覽器上訪問(wèn)改地址),該項(xiàng)目就會(huì)發(fā)起一次構(gòu)建項(xiàng)目,即拉取代碼打包部署操作,在實(shí)際中,是由git服務(wù)器回調(diào)改地址,在后面講git服務(wù)器配置時(shí)詳細(xì)講解 。
值得注意的是,如果你是學(xué)習(xí)測(cè)試,使用的是GitHub服務(wù),要確保你的回調(diào)地址已經(jīng)試外網(wǎng)映射過(guò)的,即往外網(wǎng)可以訪問(wèn)
5.構(gòu)建環(huán)境(無(wú)需配置)
6.構(gòu)建
項(xiàng)目上設(shè)置有點(diǎn)復(fù)雜,單體top-level沒(méi)法滿足
就選擇了 Execute Windows batch command
把多個(gè)包的打包拆開(kāi)一步步執(zhí)行,如下是其中一個(gè)包的打包
cd my-project
cmd.exe /C F:\maven\bin\mvn.bat -s F:\maven\settings.xml -gs F:\maven\settings.xml clean install
7.構(gòu)建后操作(這里配置遠(yuǎn)程服務(wù)器的例子)
構(gòu)建后操作的意思是,jar打包好后,要將jar發(fā)送到哪里去,發(fā)送后去和啟動(dòng)等
這里需要提前在需要部署的服務(wù)器上配置好路徑,寫(xiě)好啟動(dòng)和停止項(xiàng)目的腳本,并設(shè)置為可以執(zhí)行的腳本,
其實(shí)就是我們平時(shí)在Linux上手動(dòng)部署項(xiàng)目操作的腳本
SSH Server Name:遠(yuǎn)程服務(wù)器的名字
Transfer Set
Source files:需要上傳的文件(相對(duì)于工作區(qū)的路徑??春竺娴呐渲每梢蕴顚?xiě)多個(gè),默認(rèn)用,分隔)
注意:這里用的是相對(duì)工作區(qū)的路徑,比如你這個(gè)jenkins的工作目錄為…/Jenkins/workspace/TEST,那這的目錄只能是相對(duì)于這個(gè)目錄下的,TEST為工程名字
需要上傳…Jenkins/workspace/TEST/build/webapp下的文件,只需要寫(xiě)build/webapp/**
為目錄下的文件,要包括文件夾和文件的是*
Remove prefix:移除目錄(只能指定Transfer Set Source files中的目錄,比如我的Transfer Set Source files為build/webapp/test.jsp,那這里Remove prefix則填build/webapp/,不然的話遠(yuǎn)程服務(wù)器上會(huì)新建build/webapp/目錄)
Remote directory:遠(yuǎn)程目錄(和系統(tǒng)配置Remote Directory結(jié)合使用,一定是絕對(duì)路徑)
如果上傳路徑為/root/build/webapp,系統(tǒng)配置全局變量配置"/",這里的Remote directory為/root/build/webapp
系統(tǒng)配置全局變量配置"/root/",這里的Remote directory為/build/webapp即可。
Exec command:把你要執(zhí)行的命令寫(xiě)在里面,可以把部署的腳本放在這里執(zhí)行
案例中給出的stop.sh腳本如下:
#!/bin/bashecho "Stop Procedure : demo2-0.0.1-SNAPSHOT.jar"pid=`ps -ef |grep java|grep demo2-0.0.1-SNAPSHOT.jar|awk '{print $2}'`echo 'old Procedure pid:'$pidif [ -n "$pid" ]thenkill -9 $pidfi
案例中給出的start.sh腳本如下:
#!/bin/bashexport JAVA_HOME=/usr/java/jdk1.8.0_131echo ${JAVA_HOME}echo 'Start the program : demo2-0.0.1-SNAPSHOT.jar' chmod 777 /home/ldp/app/demo2-0.0.1-SNAPSHOT.jarecho '-------Starting-------' cd /home/ldp/app/nohup ${JAVA_HOME}/bin/java -jar demo2-0.0.1-SNAPSHOT.jar &echo 'start success'
注意:后面再去修改任務(wù)的配置有可能會(huì)導(dǎo)致git 的unable to access,這時(shí)候清理任務(wù)的工作區(qū)就好
報(bào)錯(cuò):
1、ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [127]] 解決方法
Status [127] 代表的是沒(méi)找到對(duì)應(yīng)的執(zhí)行文件。
Status [126] 腳本文件的權(quán)限不夠,增加權(quán)限:
2、[Jenkins報(bào)錯(cuò)Cannot run program “sh”](https://www.cnblogs.com/xieyang07/p/12545742.html “Jenkins報(bào)錯(cuò)Cannot run program “sh””)
Cannot run program “sh” (in directory “C:\Program Files (x86)\Jenkins\workspace\test_netcore_web”): CreateProcess error=2, 系統(tǒng)找不到指定的文件
正常下會(huì)自己找到執(zhí)行文件
解決:Manage Jenkins-> Configure System-> Shell-> Shell execute =
C:\Windows\system32\cmd.exe
win環(huán)境下提示: jenkins The system cannot find the file specified
原因是,在選擇構(gòu)建步驟的時(shí)候,選擇錯(cuò)誤了
win10環(huán)境下,選擇第一個(gè)
linux環(huán)境可以選擇第二個(gè)
3、編碼報(bào)錯(cuò)
在對(duì)應(yīng)包下設(shè)置編碼
<!\-\- 文件拷貝時(shí)的編碼 -->
4、打包前端報(bào)錯(cuò),單文件太大
問(wèn)題:
The code generator has deoptimised the styling of xxxx.js as it exceeds the max of 500kb
最近在vue項(xiàng)目引用了一個(gè)js文件,由于這個(gè)文件的大小超過(guò)了500kb,因此在打包的時(shí)候拋了一個(gè)錯(cuò):The code generator has deoptimised the styling of xxxx.js as it exceeds the max of 500kb
。
解決方案:
這個(gè)問(wèn)題其實(shí)就是babel處理文件的大小被限制在了500kb
// 在項(xiàng)目根目錄下查找 .babelrc 或 babel.config.js 文件,如果沒(méi)有就創(chuàng)建一個(gè)(兩者其一即可),配置如下:
// .babelrc:
{
“compact”: false
}// babel.config.js:
module.exports = {
compact: false,
}
5、構(gòu)建后操作Send build artifacts over SSH,執(zhí)行命令報(bào)錯(cuò)
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step ‘Send build artifacts over SSH’ changed build result to UNSTABLE
Finished: UNSTABLE
這個(gè)是我配置的時(shí)候理解錯(cuò)誤了
我配置Remote directory了目錄屬性
以為linux里已經(jīng)進(jìn)來(lái)路徑,但其實(shí)命令還處于家目錄下
所以我執(zhí)行命令的時(shí)候 cd 進(jìn)入文件的目錄,確保命令能進(jìn)行
我是先配置Exec command
pwd > mytest.txt
然后全局搜索 find . -name “mytest.txt”
確定著陸點(diǎn)是在root下
五、Linux服務(wù)器配置
在Liux服務(wù)上,上傳上文中的兩個(gè)腳本,用于啟動(dòng)和停止
六、GitHub服務(wù)器配置
在GitHub服務(wù)器上的指定項(xiàng)目里面配置上文中提到的回調(diào)地址
特別注意:為了保證回調(diào)地址網(wǎng)可以使用,
我已經(jīng)將地址:http://localhost:8080/job/jenkinsSpringBootDemo/build?token=token_demo2,
通過(guò)花生殼進(jìn)行外網(wǎng)映射為:http://zhishidi.imwork.net/job/jenkinsSpringBootDemo/build?token=token_demo2
所以,下面GitHub配置的是外網(wǎng)映射地址。
七. 測(cè)試
1.測(cè)試代碼
2.提交代碼到git,觸發(fā)構(gòu)建
3.在GitHub服務(wù)器上去看,是否已經(jīng)觸發(fā)
4.在Jenkins的控制臺(tái)查看是否,正在構(gòu)建
從下圖中可以看出,正在構(gòu)建
5.查看當(dāng)次構(gòu)建的控制臺(tái)日志
說(shuō)明已經(jīng)啟動(dòng)成功
6.查看Linux服務(wù)器,是否上傳代碼
7.在Linux上使用命令jps,查看是否啟動(dòng)
8.瀏覽器上訪問(wèn),看是否能用
說(shuō)明,已經(jīng)正常啟動(dòng)可以使用。
9.再次確認(rèn)是否能自動(dòng)化部署
修改代碼,重新提交代碼,循環(huán)1到8步查看。
總結(jié)
自動(dòng)化部署Jenkins,作為一款工具,有著非常強(qiáng)大的功能,上面我們只是講了生產(chǎn)上做Java自動(dòng)化部署的一個(gè)主要流程,其他的功能,大家可以參看官方文檔:Jenkins 用戶手冊(cè)
但是,本著學(xué)習(xí)是為了解決生產(chǎn)的原則,個(gè)人建議,用到Jenkins的什么功能就學(xué)什么就可以了,
沒(méi)必要把Jenkins的所有功能都學(xué)完在使用,就如同我們使用word文檔一樣,并沒(méi)有系統(tǒng)的他word文檔學(xué)完后,在開(kāi)始使用,而是用到什么功能就學(xué)習(xí)什么功能!
1.案例中的源碼地址:https://github.com/bangbangw/demo01.git
2.官方文檔:Jenkins 用戶手冊(cè)
3.博客配套視頻:在線學(xué)習(xí)