背景:
最近想部署一個springboot項目到阿裡雲伺服器裡面。搗鼓了很久,建構了很多次,都失敗了!實在是一臉辛酸,有點氣餒~
在此想記錄一下建構的過程。
不了解Jenkins之前,覺得Jenkins建構項目并部署到伺服器上,很懵逼的感覺,一頭霧水。原因是我固有思路:手工部署。比如:在IDEA建構好項目,然後将其war包移動到tomcat的webapps目錄下,然後重新開機一下tomcat服務,再然後就可以在浏覽器輸入:
http://ip位址:端口号/webapps目錄下的項目名
。例如:
http://47.115.58.253:8080/springboot
就可以通路了。
想了一下,這個過程其實很麻煩,首先在本地電腦建構好xxx.war,然後通過Xftp傳檔案到阿裡雲主機的tomcat的webapps目錄下,然後通過Xshell遠端遠端連接配接阿裡雲主機,指令行手動重新開機tomcat。
在此之前,我看了很多Jenkins的使用教程,然後我意圖将一個springboot項目建構成war包并且部署tomcat中,但是,不誇張地說建構了29次才得以build成功且deploy成功!
但是,最重要的一點是我貌似忽略了,springboot打包的jar包是可執行jar包,因為它是内置tomcat伺服器,即系可以直接啟動的,不用将其放在tomcat的webapps目錄,直接啟動就可以:
nohup java -jar xxx.jar > out.log &
,如果不是關聯項目,我覺得直接啟動的方式最好。
Jenkins自動化部署springboot。
Jenkins的安裝就不介紹了網上很多教程,插件需要安裝:maven , git ,這兩個插件。
建構部署分兩種情況說:
①将springboot部署到tomcat的webapps中;
1. 描述。不用填寫,預設是什麼就什麼。
2. 源碼管理。選擇git
如上圖所示,我選擇碼雲最為我的代碼管理遠端倉庫!這裡的倉庫url就是:
credentials就是您登陸碼雲的使用者名和密碼。
3. 建構觸發器。預設
4. 建構環境。預設
5. Pre Steps。預設
6. Build。
這裡的root pom 一定要填寫到Jenkins的
workspace/item名稱/根目錄
,這個根目錄,例如我的根目錄就是如上圖這個。然後goals and options可填可不填,也可以像以上這樣填。
7. Post Steps。預設
8. 建構設定。預設
9. 建構後操作。選擇deploy war/ear to a container
這裡的war/ear files到底怎麼填?
我一時間也被迷惑到了。試了好幾次才正确,輸入框右邊有個" ?",點選一下,它提示相對路徑,什麼是相對路徑,也就是我們利用Jenkins建立item的名稱,就是根目錄,根目錄以下的都是相對路徑。例如一個centos系統的完整目錄:
/usr/jenkins/workspace/test/springboot/target/springboot.war
,那麼上圖中的war/ear files就是這樣填寫:
springboot/target/springboot.war
,可以使用*通配符:
springboot/target/*.war
containers就根據您的伺服器選擇版本,這裡的credentials又是什麼?
tomcat目錄下的:apache-tomcat-8.5.51/conf/tomcat-users.xml,裡面的user的username和password,這裡有一個坑需要注意的。就是裡面的user使用者名和密碼都是原始的,例如下面這樣的,這個的user必須需要有manger角色才可以。是以必須将它修改才可以!
原始的:
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
修改後:
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="lda1021" roles="tomcat"/>
<user username="both" password="lda1021" roles="tomcat,role1"/>
<user username="longdean" password="lda1021" roles="manager-script,manager-gui,admin-gui,tomcat,role1"/>
這樣就可以了!
最後點選儲存,傳回item頁面,點選立即建構!如無意外應該可以建構并且部署成功!
但是有3點需要注意的是:
1,確定代碼編譯的java版本低于伺服器jdk的版本!
2,controller層的return必須頁面必須正确!
3,有對應的資料庫。
這三點有一點錯都有可能導緻部署失敗!即使webapps中有相應war包,但是在www中通路不了,顯示報404錯誤!
②将springboot直接啟動。
與第①點不同的是Post Steps,建構後操作!其他相同的不說。
1. 描述。同上
2. 源碼管理。同上
3. 建構觸發器。同上
4. 建構環境。同上
5. Pre Steps。同上
6. Build。同上
7. Post Steps。
選擇:Run only if build succeeds 。如何然後點選add post-build step,選擇執行shell。
shell腳本如下:
#!/bin/bash
export BUILD_ID=dontKillMe
www_path=/usr/springboot
jar_path=/usr/jenkins/workspace/test/springboot/target/
jar_name=springboot.jar
pid=$(cat /usr/springboot/springboot.pid)
cd ${jar_path}
cp -f ${jar_path}/${jar_name} ${www_path}
cd ${www_path}
kill -9 ${pid}
nohup java -jar ${jar_name} > out.log &
echo $! > /usr/springboot/springboot.pid
上述腳本的意思就是:檢測原有程序pid,有則将其殺死。然後将建構好的jar包複制到自定義工作目錄下,背景啟動jar包。
9. 建構設定。同上
10. 建構後操作。預設即可,不要 deploy war/ear to a container了。
最後,點選儲存。傳回到item頁面,點選立即建構!
祝您成功!
如果您是新手,看到這部文章的話,還是有不明白的地方,請評論,我知道的看到的會立馬回複的!