Jenkins一鍵部署思路與實現
-
從版本管理工具(SVN、Git)拉取最新代碼到中間服務器(Jenkins服務器)
-
代碼在中間服務器編譯打成war包
-
把war包復制到目標服務器臨時位置
-
將臨時位置的war包利用 .sh 腳本復制到指定的tomcat下 並啟動服務
目標服務器是指 : war包運行的服務器
部署Java
1、新建任務
在Jenkins控制台新建任務,輸入新建的任務名稱,然后選擇“構建一個自由風格的軟件項目”,點擊OK。
2、實現部署
2.1、Generl
不進行操作
2.2、源碼管理
選擇Subversion
Repository URL : SVN的地址@HEAD @HEAD獲取最新本版代碼
Credentials :憑證,賦予訪問SVN倉庫的用戶
Local module directory :選填
2.3、構建觸發器
不進行操作
2.4、構建環境&構建
clean package -Dmaven.test.skip=true 打包並且跳過測試
此時已經在中間服務器中將拉取的文件打成war包。
2.5、構建后操作
選擇 Send build artifacts over SSH
配置 SSH Server
Name : 使用的服務器 ,在系統管理-> 系統設置 -> SSH Server 點擊增加配置
Name : 名稱
Host Name : 主機地址
UserName : 使用的根地址
Remote Directory : 服務目錄 de 地址
點擊“高級”設置服務器密碼 鏈接的端口號 以及超時時間等信息 點擊Test Configuration 測試鏈接
上述幾個地址就構成接下來操作的根路勁
Transfers :
Source files : 源文件 指本次任務中在中間服務器的war包位置
通常使用:
**/*.war
Remove Prefix : 刪除前綴 不填
Remote directory : 遠程目錄 是指 將中間服務器的war包復制到目標服務器指定的臨時位置
Exec command :執行的 .sh 腳本文件的地址
點擊保存
3、附: sh 文件
#!/bin/bash
export JAVA_HOME=/home/software/jdk/jdk1.8.0_162
rm -rf /tomcat/tomcat-9-plan-report/webapps/ROOT.war
rm -rf /tomcat/tomcat-9-plan-report/webapps/ROOT/
rm -f /tomcat/tomcat-9-plan-report/logs/*
cp /tomcat/jenkins_files/planreport-online-war/PlanReport/target/ROOT.war /tomcat/tomcat-9-plan-report/webapps/
rm -rf /tomcat/jenkins_files/tomcat-9-plan-report/*
cd /tomcat/tomcat-9-plan-report/bin/
TOMCAT_PATH=/tomcat/tomcat-9-plan-report/bin
echo "TOMCAT_PATH is $TOMCAT_PATH"
PID=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "Will kill tomcat: $PID"
sh "$TOMCAT_PATH/shutdown.sh"
sleep 6
else echo "No Tomcat Process $PID"
fi
PID2=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID2" ]; then
kill -9 $PID2
echo "Try to kill $PID2"
else echo "No Tomcat Process $PID2"
fi
sh "$TOMCAT_PATH/startup.sh"
sleep 3
PID=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "\nRestart tomcat successfully!"
else
echo "\nFail to startup tomcat"
exit 1
fi
解析:
3.1、刪除tomcat下webapps下的文件和日志
3.2、復制文件
3.3、刪除臨時位置的war文件
3.4、進入tomcat的bin下
3.5、得到進程號
3.6、將進程殺掉 並停掉tomcat
3.7、啟動tomcat。
部署JS
基本同上
不同點:
1、 構建環境不選
2、構建選擇“執行shell”
echo $PATH
node -v
npm -v
cd code
npm install
npm run testbuild
3、看圖
部署時可能遇見的問題:
SSH: Connecting from host [jenkins]
SSH: Connecting with configuration [167] ...
SSH: EXEC: STDOUT/STDERR from command [/home/jenkins_file/planreport_online-deply.sh] ...
bash: /home/jenkins_file/planreport_online-deply.sh: Permission denied
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [167] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [126]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
jenkins自動化構建時,執行遠程SSH時,返回錯誤狀態碼 126.
原因: 對應的.sh 腳本權限不足,修改需執行的腳本權限即可、
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
發布時,異常消息[Exec退出狀態不為零。狀態1.
原因:未知,解決:再次部署一遍、
-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory
原因:在window下創建的文件,后將后綴修改為.sh,因此在Linux系統中會出現文件的格式是dos,只要將文件格式修改為unix就OK了
具體操作步驟
1、查看文件格式 用vim 打開出錯的文件 按 ESC鍵 再按shift+冒號 輸入 set ff 回車 可以看見 該文件的格式 fileformat=dos
2、按shift + 冒號 輸入 set ff=unix 回車 發現沒反應,那就對了。
3、可以按 shift + 冒號 set ff 查看 fileformat=unix