天天看點

利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

背景:

最近想部署一個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 ,這兩個插件。

利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

建構部署分兩種情況說:

①将springboot部署到tomcat的webapps中;

1. 描述。不用填寫,預設是什麼就什麼。
2. 源碼管理。選擇git
利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

如上圖所示,我選擇碼雲最為我的代碼管理遠端倉庫!這裡的倉庫url就是:

利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

credentials就是您登陸碼雲的使用者名和密碼。

3. 建構觸發器。預設
4. 建構環境。預設
5. Pre Steps。預設
6. Build。
利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

這裡的root pom 一定要填寫到Jenkins的

workspace/item名稱/根目錄

,這個根目錄,例如我的根目錄就是如上圖這個。然後goals and options可填可不填,也可以像以上這樣填。

7. Post Steps。預設
8. 建構設定。預設
9. 建構後操作。選擇deploy war/ear to a container
利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)
這裡的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。

利用Jenkins自動化部署springboot項目到阿裡雲伺服器(centos8)

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頁面,點選立即建構!

祝您成功!

如果您是新手,看到這部文章的話,還是有不明白的地方,請評論,我知道的看到的會立馬回複的!

繼續閱讀