jar包部署
通過 java -jar 方式運行 jar包.
創建項目
創建自由風格項目
參數化構建

源碼管理

構建

jar包構建的代碼
主義腳本中 jar包名字 是構建之后的名字
[root@node2 jenkins]# cat deploy_java_jar.sh #!/bin/sh # 工作目錄 CODE_DIR=$WORKSPACE # 壓縮包存放目錄 TAR_DIR="/data/jenkins/${JOB_NAME}/" # 文件夾及文件名 FILE_DIR="${TAG_VERSION}_${JOB_BASE_NAME}" # 壓縮文件全稱 PACKAGE="${FILE_DIR}.tar.gz" # jar 包名字 JAR_NAME='hello-world.jar' # 構建命令 MVN_ORDER='/usr/local/maven/bin/mvn clean package' # 遠程部署服務器地址 REMOTE_IP='172.16.0.64 172.16.0.63' # 遠程部署服務器賬號 REMOTE_USER=root # 遠程端口 REMOTE_PORT=22 # 遠程部署目錄 REMOTE_DIR='/data/' if [ ! -d ${TAR_DIR} ];then mkdir ${TAR_DIR} -p echo "創建文件夾: ${TAR_DIR}" fi build_mvn() { echo "--------------------------[ mvn clean package ]---------------------------" cd ${CODE_DIR} ${MVN_ORDER} if [ $? -eq 0 ]; then echo "構建成功: ${CODE_DIR}" else echo "構建失敗: ${CODE_DIR}" exit 1 fi } cmp_package() { echo "--------------------------[ compress jar ]---------------------------" cd ${CODE_DIR}/target/ && tar zcf ${TAR_DIR}${PACKAGE} ${JAR_NAME} if [ $? -eq 0 ]; then echo "打包成功: ${TAR_DIR}${PACKAGE}" else echo "打包失敗: ${TAR_DIR}${PACKAGE}" exit 1 fi } scp_package() { echo "--------------------------[ remote rsync jar ]---------------------------" for IP in ${REMOTE_IP};do rsync -arq --port=${REMOTE_PORT} ${TAR_DIR}${PACKAGE} ${REMOTE_USER}@${IP}:${REMOTE_DIR} if [ $? -eq 0 ]; then echo "遠程拷貝成功: $IP - ${TAR_DIR}${PACKAGE}" else echo "遠程拷貝失敗: $IP - ${TAR_DIR}${PACKAGE}" exit 1 fi done } remote_untar() { echo "--------------------------[ remote untar jar ]---------------------------" for IP in ${REMOTE_IP};do ssh $IP "mkdir ${REMOTE_DIR}${FILE_DIR}" ssh $IP "cd $REMOTE_DIR && tar xf ${PACKAGE} -C ${REMOTE_DIR}${FILE_DIR}" ssh $IP "cd $REMOTE_DIR && rm -rf ${PACKAGE}" if [ $? -eq 0 ]; then echo "解壓成功: $IP - ${PACKAGE}" else echo "解壓失敗: $IP - ${PACKAGE}" exit 1 fi done } remote_ln() { # 確保軟件連目錄原本就是軟連接目錄 # ssh $REMOTE_IP "cd $REMOTE_DIR && ln -snf ${REMOTE_DIR}/${TAR_NAME} html" echo "--------------------------[ remote ln jar ]---------------------------" for IP in ${REMOTE_IP};do ssh $IP "cd $REMOTE_DIR && rm -rf ${JAR_NAME} && ln -s ${REMOTE_DIR}${FILE_DIR}/${JAR_NAME} ${JAR_NAME}" if [ $? -eq 0 ]; then echo "軟連接成功: $IP - ${JAR_NAME}" else echo "軟連接失敗: $IP - ${JAR_NAME}" exit 1 fi done } run_jar() { echo "--------------------------[ remote start jar ]---------------------------" for IP in ${REMOTE_IP};do ssh $IP " nohup java -jar ${REMOTE_DIR}$JAR_NAME >> ${REMOTE_DIR}${JAR_NAME}.out 2>&1 &" if [ $? -eq 0 ]; then echo "啟動成功: $IP - ${JAR_NAME}" else echo "啟動失敗: $IP - {JAR_NAME}" exit 1 fi done } stop_jar() { echo "--------------------------[ remote stop jar ]---------------------------" for IP in ${REMOTE_IP};do ssh $IP "ps -ef | grep ${JAR_NAME} | grep -v grep" if [ $? -eq 0 ]; then ssh $IP "ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print \$2}' | xargs kill -s 9" if [ $? -eq 0 ]; then echo "停止成功: $IP - ${JAR_NAME}" else echo "停止失敗: $IP - ${JAR_NAME}" exit 1 fi else echo "越過${IP}服務器: 沒有啟動${JAR_NAME}進程!" continue fi done } main() { build_mvn; cmp_package; scp_package; remote_untar; stop_jar; remote_ln; run_jar; } case $pattern in deploy) # if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then echo "構建失敗該 ${TAG_VERSION} 版本號已部署" # exit 1 # else echo "---------- 開始發布 版本:${TAG_VERSION} --------" main echo "---------- 完成發布 版本:${TAG_VERSION} --------" # fi ;; rollback) echo "---------- 開始回滾 版本:${TAG_VERSION} --------" stop_jar; remote_ln; run_jar; echo "---------- 完成回滾 版本:${TAG_VERSION} --------" ;; *) echo "Usage: $0 {deploy | rollback }" exit 1 ;; esac
war包構建
war包基於tomcat jenkins 配置一樣,區別代碼
腳本代碼
[root@node2 jenkins]# cat deploy_java_war.sh
#!/bin/sh
# 工作目錄
CODE_DIR=$WORKSPACE
# 壓縮包存放目錄
TAR_DIR="/data/jenkins/${JOB_NAME}/"
# 文件名字
FILE_DIR="${TAR_VERSION}_${JOB_BASE_NAME}"
# 壓縮文件全稱
TAR_NAME="${FILE_DIR}.tar.gz"
# jar 包名字
JAR_NAME='hello-world-war-1.0.0.war'
# 構建命令
MVN_ORDER='/usr/local/maven/bin/mvn clean package'
# 遠程部署服務器地址
REMOTE_IP='172.16.0.64 '
# 遠程部署服務器賬號
REMOTE_USER=root
# 遠程端口
REMOTE_PORT=22
# 遠程部署目錄
REMOTE_DIR='/usr/local/tomcat/webapps/'
if [ ! -d ${TAR_DIR} ];then
mkdir ${TAR_DIR} -p
echo "創建文件夾: ${TAR_DIR}"
fi
build_mvn() {
echo "--------------------------[ mvn clean package ]---------------------------"
cd ${CODE_DIR}
${MVN_ORDER}
if [ $? -eq 0 ]; then
echo "構建成功: ${CODE_DIR}"
else
echo "構建失敗: $ls
{CODE_DIR}"
exit 1
fi
}
cmp_package() {
echo "--------------------------[ compress jar ]---------------------------"
cd ${CODE_DIR}/target/ && tar zcf ${TAR_DIR}${TAR_NAME} ${JAR_NAME}
if [ $? -eq 0 ]; then
echo "打包成功: ${TAR_DIR}${TAR_NAME}"
else
echo "打包失敗: ${TAR_DIR}${TAR_NAME}"
exit 1
fi
}
scp_package() {
echo "--------------------------[ remote rsync jar ]---------------------------"
for IP in ${REMOTE_IP};do
rsync -arq --port=${REMOTE_PORT} ${TAR_DIR}${TAR_NAME} ${REMOTE_USER}@${IP}:${REMOTE_DIR}
if [ $? -eq 0 ]; then
echo "遠程拷貝成功: $IP - ${TAR_DIR}${TAR_NAME}"
else
echo "遠程拷貝失敗: $IP - ${TAR_DIR}${TAR_NAME}"
exit 1
fi
done
}
remote_untar() {
echo "--------------------------[ remote untar jar ]---------------------------"
for IP in ${REMOTE_IP};do
ssh $IP "mkdir ${REMOTE_DIR}${FILE_DIR}"
ssh $IP "cd $REMOTE_DIR && tar xf ${TAR_NAME} -C ${REMOTE_DIR}${FILE_DIR}"
ssh $IP "cd $REMOTE_DIR && rm -rf ${TAR_NAME}"
ssh $IP "cd $REMOTE_DIR${FILE_DIR} && unzip -q ${JAR_NAME}"
ssh $IP "cd $REMOTE_DIR${FILE_DIR} && rm -rf ${JAR_NAME}"
if [ $? -eq 0 ]; then
echo "解壓成功: $IP - ${TAR_NAME}"
else
echo "解壓失敗: $IP - ${TAR_NAME}"
exit 1
fi
done
}
remote_ln() {
# 確保軟件連目錄原本就是軟連接目錄
# ssh $REMOTE_IP "cd $REMOTE_DIR && ln -snf ${REMOTE_DIR}/${TAR_NAME} html"
echo "--------------------------[ remote ln jar ]---------------------------"
for IP in ${REMOTE_IP};do
ssh $IP "cd $REMOTE_DIR && rm -rf ROOT && ln -s ${REMOTE_DIR}${FILE_DIR} ROOT"
if [ $? -eq 0 ]; then
echo "軟連接成功: $IP - ${JAR_NAME}"
else
echo "軟連接失敗: $IP - ${JAR_NAME}"
exit 1
fi
done
}
run_jar() {
echo "--------------------------[ remote start jar ]---------------------------"
for IP in ${REMOTE_IP};do
ssh $IP "/usr/local/tomcat/bin/startup.sh"
if [ $? -eq 0 ]; then
echo "啟動成功: $IP - ${JAR_NAME}"
else
echo "啟動失敗: $IP - {JAR_NAME}"
exit 1
fi
done
}
stop_jar() {
echo "--------------------------[ remote stop jar ]---------------------------"
for IP in ${REMOTE_IP};do
ssh $IP "ps -ef | grep tomcat | grep -v grep" &>/dev/null
if [ $? -eq 0 ]; then
ssh $IP "/usr/local/tomcat/bin/shutdown.sh"
if [ $? -eq 0 ]; then
echo "停止成功: $IP - ${JAR_NAME}"
else
echo "停止失敗: $IP - ${JAR_NAME}"
exit 1
fi
else
echo "越過${IP}服務器: 沒有啟動tomcat!"
continue
fi
done
}
main() {
build_mvn;
cmp_package;
scp_package;
remote_untar;
stop_jar;
remote_ln;
run_jar;
}
case $pattern in
deploy)
if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "構建失敗該 ${TAR_VERSION} 版本號已部署"
exit 1
else
echo "---------- 開始發布 版本:${TAR_VERSION} --------"
main
echo "---------- 完成發布 版本:${TAR_VERSION} --------"
fi
;;
rollback)
echo "---------- 開始回滾 版本:${TAR_VERSION} --------"
stop_jar;
remote_ln;
run_jar;
echo "---------- 完成回滾 版本:${TAR_VERSION} --------"
;;
*)
echo "Usage: $0 {deploy | rollback }"
exit 1
;;
esac
