一、安裝tomcat
tomcat本來應該是第3臺服務器的(第一臺:gitlab,第二臺:jenkins,第三臺:tomcat),我這里資源有限,就把tomcat安裝jenkins服務器了。
#解壓tocmcat
[root@bogon home]#tar -zxvf apache-tomcat-9.0.80.tar.gz#查看是否解壓成功
[root@bogon home]#ll
drwxr-xr-x. 9 root root 220 7月 2 10:06 apache-tomcat-9.0.80
-rw-r--r--. 1 root root 11692853 7月 2 10:04 apache-tomcat-9.0.80.tar.gz#查看是否可以啟動
[root@bogon home]# cd apache-tomcat-9.0.80/bin/
[root@bogon bin]# ./startup.sh
Using CATALINA_BASE: /home/apache-tomcat-9.0.80
Using CATALINA_HOME: /home/apache-tomcat-9.0.80
Using CATALINA_TMPDIR: /home/apache-tomcat-9.0.80/temp
Using JRE_HOME: /usr/lib/jvm/java-11-openjdk
Using CLASSPATH: /home/apache-tomcat-9.0.80/bin/bootstrap.jar:/home/apache-tomcat-9.0.80/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
安裝完tomcat后,jenkins需要使用到tomcat的賬戶,給tomcat傳輸war包。所以我們下面配置
tomcat賬號。如果不配置,啟動tomcat后,點擊manager webapp是無法訪問
?看,無法訪問吧:
二、配置tomcat
(1)修改tomcat-users.xml
配置tomcat用戶,這里tomcat的賬號密碼均是:tomcat
vi /home/apache-tomcat-9.0.80/conf/tomcat-users.xml配置文件如下
[root@localhost conf]# vi /home/apache-tomcat-9.0.80/conf/tomcat-users.xml<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
(2)修改context.xml文件
注釋這一塊,具體干嘛不清楚,待研究,不過目的還是配置tomcat的賬號和密碼的。
[root@localhost META-INF]# vi /home/apache-tomcat-9.0.80/webapps/manager/META-INF/context.xml<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
(3)重啟tomcat
重啟tomcat后,在訪問tomcat的manager
?可以訪問了
三、jenkins的war包部署項目
?現在我們使用jenkins、tomcat2者結合,把war包啟動。但是Jenkins中自動構建項目的類型有很多,常用的有以下三種:
*自由風格軟件項目(FreeStyleProject)
*Maven項目 (Maven Project)
*流水線項目(Pipeline Prgject)|
每種類型的構建其實都可以完成一樣的構建過程與結果,只是在操作方式、靈活度等方面有所區別,在實際開發中可以根據自己的需求和習慣來選擇。(PS:教程里老師推薦使用流水線類型,因為靈活度非常高)
(1)自由風格方式部署
拉取代碼
1、之前我們已經寫過如何拉取代碼和打包了。不再寫了。
注意:因為使用的是自由風格的方式部署,創建項目時要選擇自動項目,就是自帶的那一個。
項目創建好了
安裝插件
2、首先需要jenkins安裝一個插件? :Deploy to container
?
配置插件的使用?
插件安裝完成后,進入項目
點擊構建后操作
?設置war包路徑
注意:截圖里的war/ear files路徑錯了,不用寫全路徑,因為已經是這個項目了,直接這么寫:target/*.war
?點擊添加,設置tomcat(我tomcat在本地)
?
最后build一下,看日志
?看日志如下就是可以了
?然后刷新查看tomcat
注意:這個時候時候已經把war包放在tomcat的webapps目錄下了。
然后點擊項目名字,發現項目已經啟動了
測試人員直接訪問該地址就可以測試了。開發人員提交代碼到gitlab后,測試人員自己點build,就會自動更新了。
測試開發人員修改代碼,然后提交到gitlab。點擊jenkins的build看看代碼是否自動更新且部署成功。
?然后build一下
刷新項目地址,發現已經是最新代碼了。
?(2)maven項目構建類型方式部署
安裝插件
首先我們先安裝一個插件:Maven Integration
?創建項目
獲取代碼
拉取代碼和自由風格方式一樣的
?然后build,看看有沒有拉取成功,看一下服務器有沒有對用項目名就行
?沒問題,拉成功了
打包
這里和自由風格不同,圖里寫錯字了。
讓tomcat加載該war包
build一下,看日志
?看tomcat
訪問項目?
修改代碼,build?
修改代碼。提交
?build后查看項目
查看控制臺日志沒問題
看項目,也更新了。
?(3)流水線方式部署
流水線(pipeline)直接寫代碼即可實現拉取代碼、打包、同步tomcat啟動,這個代碼也是可以自動生成,整體來說沒有上面那2個配置的地方多,流水線只在一個地方寫代碼即可。
流水線(pipeline)的好處:
代碼:peline以代碼的形式實現,通常被檢入源代碼控制,使團隊能夠編輯,審查和迭代其傳送流程。
持久:無論是計劃內的還是計劃外的服務器重啟,Pipeline都是可恢復的。
可停止:Pipeline可接收交互式輸入,以確定是否繼續執行Pipeline。
多功能:Pipeline支持現實世界中復雜的持續交付要求。它支持fork/join、循環執行,并行執行任務的功
能。
可擴展:Pipeline插件支持其DSL的自定義擴展,以及與其他插件集成的多個選項。
如何創建Jenkins Pipeline呢?
Pipeline腳本是由Groovy語言實現的,但是我們沒必要單獨去學習Groovy
Pipeline支持兩種語法:Declarative(聲明式)和 Scripted Pipeline(腳本式)語法
Pipeline也有兩種創建方法:可以直接在Jenkins的WebUI界面中輸入腳本;也可以通過創建一個
Jenkinsfile腳本文件放入項目源碼庫中(一般我們都推薦在Jenkins中直接從源代碼控制(SCM)中直接載入Jenkinsfile Pipeline 這種方法)。
安裝插件
安裝pipeline插件
遇到的坑:我安裝該插件,提示我高版本的jenkins才可以下載該插件。然后我吭哧吭哧把jenkins升級為了2.504.3
?
(ps:上面pipeline插件里的部分子插件安裝失敗了,版本太低了,我先試試可以走通流水線項目不,答:走不通,我升級可jenkins版本到2.504.3)?
創建一個流水線項目
嘗試聲明式打印流程
發現流水線和上面2個相比,不需要找配置git、不需要配配置tomcat的地方,直接在這里寫配置git、配置tomcat,下面寫個簡單的打印(只是打印,還沒寫拉取配置的代碼)
pipeline {agent anystages {stage('pull code') {steps {echo '----------------Hello World1'}}stage('build project') {steps {echo '----------------------Hello World2'}}stage('public project') {steps {echo '----------------------------Hello World3'}}}
}
build一下,可以打印。?
?腳本式案例
node {def mvnHomestage('pull code') { // for display purposesecho '拉取'}stage('Build project') {// Run the maven buildwithEnv(["MVN_HOME=$mvnHome"]) {echo '生成'}}stage('publish project') {echo '執行'}
}
然后build一下,發現是有日志打印的。
?聲明式案例
?
聲明式實戰?
1拉取代碼
上面“生成流水線腳本”后,直接拉取代碼,看看能否拉取
?看日志拉取成功
2打包
?
?
生成打包腳本,放進去
?
?build一下,看看日志,沒報錯,然后服務器也生成了war包
?3遠程部署到tomcat
?
?build一下,看看日志,沒問題
?
提交代碼用流水線在build一下,看看項目是不是更新
build一下,項目更新了,流水線部署沒問題,且完成。
4,把構建代碼放在idea里
即使jenkins崩了,idea里也有該代碼。同時也實現了版本控制。
?
5把構架命令放在idea
打開idea,創建一個默認名為Jenkinsfile的文件
?
?設置jenkins
?build,看看成功不。成功