文章目录
- 1. 系统设置
- 1.1 设置 Hook URL
- 1.2 给 Github 项目设置 Webhooks(`必须`)
- 2. 新建任务
- 2.1 General
- 2.2 源码管理
- 2.2.1 Jenkins 凭证新增
- 2.3 Build
- 2.4 Post Steps
- 2.5 构建后操作
- 2.5.1 配置跨服部署
- 2.5.2 配置邮件通知
- 3. 构建项目
- 4. 项目启动脚本
1. 系统设置
1.1 设置 Hook URL
1.2 给 Github 项目设置 Webhooks(必须
)
2. 新建任务
2.1 General
2.2 源码管理
2.2.1 Jenkins 凭证新增
项目为私有项目的话, 这一步必须添加凭证
2.3 Build
2.4 Post Steps
2.5 构建后操作
2.5.1 配置跨服部署
- 如果需要启动项目, 则直接将
Exec command
的命令 ls
改为 bash ~/run.sh up
- 并将
run.sh
脚本上传到 SERVER_B
的 ~
目录下
2.5.2 配置邮件通知
3. 构建项目
4. 项目启动脚本
#!/usr/bin/env bash
:<<answer
author: Answer.AI.L
date: 2019-05-07
answer
# 项目名称
projectName="answer-demo"
now=`date +%Y%m%d`
time=`date +"%Y-%m-%d %H:%M:%S"`
# jar 包存放目录
jarDir="/home/ubuntu/${projectName}"
# 日志打印文件
logFile="${jarDir}/${projectName}_${now}.log"
declare -A modes
modes=([up]='up' [down]='down' [restart]='restart' [status]='status')
MODE=$1
# 变量 MODE 为空
if [ -z "${MODE}" ];then
echo "start mode can not be empty."
echo "Format: bash run.sh up | down | restart | status"
exit 1
fi
if [ -z "${modes[$MODE]}" ]; then
echo "不存在选项: [${MODE}]"
echo "Format: bash run.sh up | down | restart | status"
exit 1
fi
jarCnt=`find "${jarDir}" -name "*.jar" -exec basename {} \; | wc -l`
if [ ${jarCnt} != 1 ]; then
echo "jar file count: ${jarCnt} under path[${jarDir}] Excepting 1."
sudo find "${jarDir}" -name "*.jar"
exit 1
fi
jarName=`sudo find "${jarDir}" -name "*.jar" -exec basename {} \;`
jarPath="${jarDir}/${jarName}"
if [ -e ${logFile} ]; then
echo -e "\n\n\n" >> ${logFile}
fi
echo "###################################################################" >> ${logFile}
echo -e "\t${projectName} ${MODE} at ${time} by `whoami`" >> ${logFile}
echo "###################################################################" >> ${logFile}
pid=`ps -ef | grep "${jarDir}" | grep -v "grep" | awk '{print $2}'`
if [ ${pid} ];then
echo "pid: [${pid}], mode[${MODE}]"
fi
if [ ${MODE} == "up" ]; then
if [ ${pid} ];then
echo "kill pid[${pid}]"
kill -9 ${pid}
unset pid
fi
if [ -z ${pid} ];then
java -jar ${jarPath} >> ${logFile} 2>&1 &
# tail -300f ${logFile}
else
echo "service ${projectName} is already running."
fi
elif [ ${MODE} == "down" ]; then
if [ -z ${pid} ];then
echo "service ${projectName} is not running."
else
kill -9 ${pid}
echo "stop service: "$?
fi
elif [ ${MODE} == "restart" ]; then
if [ ${pid} ];then
echo "kill pid[${pid}]"
kill -9 ${pid}
unset pid
fi
java -jar ${jarPath} >> ${logFile} 2>&1 &
# tail -300f ${logFile}
elif [ ${MODE} == "status" ]; then
if [ -z ${pid} ];then
echo "service ${projectName} is not running."
else
echo "service ${projectName} is running and pid: ${pid}."
fi
else
echo "mode: ${MODE} is invalid."
exit 1
fi
echo "${projectName} ${MODE} ended."
exit 0