上一節,新建了一個job,同時配置了job的一些基本信息
當我們點擊“開始構建”後,將從git倉庫中將代碼clone到jenkins安裝目錄下的workspace下
具體路徑可以通過jenkins安裝目錄下的config.xml進行配置
這一節以一個完整的案例來講解如何實現自動部署
1、確保構建成功
有如下幾個需求:
(1). 如果我們的項目是多個項目放置在一起的,如果我只想要構建其中某個項目
(2). 多個項目同時構建
1.1. 單獨構建其中某個項目
接下來進行job配置修改
(1)構建命令配置
因爲我是在window下安裝的jenkins,所以這裏添加windows批處理命令,如果是安裝在Linux中,則添加shell命令
這裏如果有多個maven項目需要構建,那麼需要通過&&連接多個命令執行,否則在第一個構建完成後就不會執行第二個構建了,例如
cd D:\Software\jenkins-2.150.1\workspace\gs-om-ms\gs-om-core && D:\Software\apache-maven-3.2.2\apache-maven-3.2.2\bin\mvn clean install -DskipTests && cd D:\Software\jenkins-2.150.1\workspace\gs-om-ms\gs-om-ms && D:\Software\apache-maven-3.2.2\apache-maven-3.2.2\bin\mvn clean package spring-boot:repackage -DskipTests
如果不通過&&,則只會構建gs-om-core項目
這裏做了兩件事:
(a)進入需要構建的項目目錄下
(b)執行構建命令,這裏用本地安裝的maven,同時使用springboot的打包插件進行打包,同時跳過測試用例(實際不應該跳過)
springboot打包插件需要在pom.xml中配置springboot插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.4.RELEASE</version>
</plugin>
(2)SSH傳輸配置
source files:配置要傳輸的源文件,這裏是一個相對路徑,相對當前job工作目錄而言,即前面提到的代碼的workspace。這裏配置了工作目錄下gs-om-ms/target的jar文件,因爲我只需要對gs-om-ms進行構建,所以只傳輸這部分jar文件就行
remove prefix: 移除指定源文件的前綴,這裏移除gs-om-ms/target,這裏的話只會保留具體的文件,沒有路徑信息
remote directory:這個我們在SSH Server的時候配置了,也可以在這裏配置
exec command: 在遠程服務器中執行的命令,我們在服務器的/usr/local/www/gs/gs-om-ms/目錄下新建了reload.sh腳本,這個腳本就是爲了重新部署的,後面會講到
1.2 多個項目構建,類似單項目構建,無非就是本地構建命令放置在這裏執行,確保在本地測試通過
2、自動部署腳本編寫
因爲我們這裏使用的用戶是jenkins,權限比較少,所以類似於kill這種命令就無法執行,所以這裏簡單做法是:將jenkins設置成可以執行任何腳本且sudo時不需要密碼
在/etc/sudoers文件中
root ALL=(ALL) ALL
下方添加
jenkins ALL=(ALL) NOPASSWD:ALL
這樣用戶在執行sudo -s時不需要輸入密碼就能切換到root賬號
有了權限後,我們就可以開始編寫reload.sh腳本了
#!/bin/bash
cur_dateTime="`date +%Y-%m-%d-%H%m%s`"
#切換用戶到root
sudo -s<<EOF
#使path生效後才能使用dzy命令
source /etc/profile
#關閉已啓動的系統
dzy stop gs-om-ms
#將原先的jar備份
mv /usr/local/www/gs/gs-om-ms/target/gs-om-ms.jar /usr/local/www/gs/gs-om-ms/target/gs-om-ms-${cur_dateTime}.jar
#將新構建的jar重命名爲運行命令需要的jar
mv /usr/local/www/gs/gs-om-ms/target/gs-om-ms-1.0-SNAPSHOT.jar /usr/local/www/gs/gs-om-ms/target/gs-om-ms.jar
#啓動系統
dzy start gs-om-ms dev
echo "jenkins自動部署成功"
exit 0
EOF
有了以上步驟後,我就可以開始構建了
從構建輸出可以看出:先從遠程倉庫中pull代碼到本地種,然後執行我們編寫的windows批處理命令
構建成功後:
構建成功後,文件已經上傳到服務器中了,同時執行我們編寫的shell命令
3、問題
(1)本來是想直接使用root賬號來執行腳本的,這樣就不需要切換到root賬戶,但是使用root賬號,SSH Server一直連接不上,所以後面只能使用sudo -s<<EOF切換到root用戶
(2)構建過程中有些jar找不到,就需要考慮settings.xml配置文件的正確性以及已經下載的jar是否有問題
(3)自定義的腳本添加到/ect/profile中,但是並沒有生效,得通過source /etc/profile使其生效才能執行自定義的命令(dzy),否則會出現命令找不到的問題
4、總結
(1)本地確保構建成功後,配置相應構建命令;
(2)編寫運維腳本(這裏爲部署腳本,根據自己項目規則來定)
(3)配置jar傳輸完成後執行的腳本
本人開發的一個網站:編程之道,歡迎來踩!!!