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