目的:在同一台服務器上用Jenkins+git+maven自動化構建部署Java項目
1、環境准備
一台服務器上搭建有:
2、在jenkins上新建項目

填入項目名

隨便填寫寫描述;
點擊git,在 Repository URL中填入github項目,我這里填的是阿良老師的一個Java demo項目:https://github.com/lizhenliang/tomcat-java-demo.git


在底部的Excuse shell寫入
#!/bin/bash
sh -x /opt/jenkins-tomcat.sh

3、編寫shell腳本
在opt/中新建一個shell腳本,並修改對應自己服務器的變量值
vim /opt/jenkins-tomcat.sh
#!/bin/bash
#需要 root權限 git maven /data/backup
#備份文件后綴
DATE=$(date +%F_%T)
#tomcat目錄名
TOMCAT_NAME=tomcat8.0
#tomcat完整路徑
TOMCAT_DIR=/usr/local/$TOMCAT_NAME
#tomcat ROOT路徑
ROOT=${TOMCAT_DIR}/webapps/ROOT
#備份存放路徑
BACKUP_DIR=/data/backup
#jenkins存放git拉取代碼的路徑
WORK_DIR=/var/lib/jenkins/workspace
#項目名
PROJECT_NAME=Java-test
#maven的家目錄
MAVEN_HOME=/usr/local/maven3.6
#防止jenkins默認shell執行完后,終止其子進程
BUILD_ID=DONTKILLME
#構建
cd ${WORK_DIR}/${PROJECT_NAME}
${MAVEN_HOME}/bin/mvn clean
if [ $? -ne 0 ]; then
echo "maven bauid failure!"
exit 1
fi
${MAVEN_HOME}/bin/mvn package
if [ $? -ne 0 ]; then
echo "maven bauid failure!"
exit 1
fi
#部署
TOMCAT_PID=$(ps -ef|grep "$TOMCAT_NAME"|egrep -v "grep|$0" |awk 'NR==1{print $2}' )
#ps $TOMCAT_PID
[ $TOMCAT_PID!="" ] && kill -9 $TOMCAT_PID
#[ $TOMCAT_PID!="" ] && $TOMCAT_DIR/bin/shutdown.sh
[ -d $ROOT ]&& mv $ROOT $BACKUP_DIR/${TOMCAT_NAME}_ROOT$DATE
cp -f $WORK_DIR/$PROJECT_NAME/target/*.war ${ROOT}.war
$TOMCAT_DIR/bin/startup.sh
TOMCAT_NEW_PID=$(ps -ef|grep "$TOMCAT_NAME"|egrep -v "grep|$$" |awk 'NR==1{print $2}' )
echo "啟動成功,tomcat pid:${TOMCAT_NEW_PID}"
~
建立備份目錄
mkdir -p /data/backup
4、配置
4.1、配置jenkins的Java路徑

填入你服務器上的Java安裝路徑,然后保存

4.2、修改jenkins執行用戶
為了防止執行shell的時候出現“權限不足”的情況,所以把jenkins的執行用戶改成root
vim /etc/sysconfig/jenkins
#把JENKINS_USER的值還成root
JENKINS_USER="root"
5、執行Java-demo項目

點擊你的項目名

執行構建后,進入控制台

出現下面兩句就是構建成功了,如果構建失敗,也會把報錯打印出來

訪問tomcat網站頁面

(完)
5、BUG記錄:
BUG1::執行mvn報錯沒有找到jdk
解決:在系統設置—>全局工具配置—>設置Java的家目錄
BUG2:執行shell的時候權限不足
解決1:修改jenkins服務的默認用戶為root
解決2:根據具體情況賦予部分權限給jenkins
BUG3:在構建時,tomcat提起來了,構建完成后tomcat卻又沒提起來
分析:jenkins用shell構建完成后,其子進程也隨之被銷毀
解決1:后台啟動tomcat
nohup sh /usr/local/tomcat8.0/bin/startup.sh &
解決2:在腳本前面加入
BUILD_ID=DONTKILLME
BUG4:構建成功卻報錯
Build step 'Execute shell' marked build as failure
Finished: FAILURE
解決:檢查代碼,看是否有語法錯誤
