1. 单体spring boot 项目流水线主机部署
1.1 创建流水线
我们选择模板,当然也可以自己新建一个
1.2 添加流水线源
这里是根据自己的代码仓库决定的,我用的gitee,需要添加服务连接
添加服务连接
新建服务授权/证书 ==点击
新建
==自动跳转至gitee认证页面,同意授权即可
授权过后自动返回并选择证书
选择需要部署的代码仓库及分支,之后点击创建即可
- 工作目录是流水线执行的目录不用管,或者需要自定义也可以
1.3 Java构建并上传
首先我们本地打包后的目录,我们需要打包两个文件
- gateway/target/gateway-0.0.1-SNAPSHOT.jar -部署包
- gateway/deploy.sh-部署命令(具体内容在1.4中,先填写)
将路径填写到打包路径上,需要上传几个就填几个,数量太多也可以直接上传目录
如:我只填写
gateway/
那么gateway目录下的所以文件都会被打包上传
1.4 主机部署
1.4.1 添加新主机
因为我的主机是谷歌云的,我选择的是自有主机,如果是阿里云的主机选择阿里云ECS即可
将命令在需要添加的主机上执行
添加完成后,在此处就可以选择自己的主机了
1.4.2 配置下载路径及执行用户
这里选默认就行
- 下载路径就是我们在
java构建上传
后打好的包下载到我们部署主机的什么位置
1.4.3 配置部署脚本
1.4.3.1 官方脚本部署
deploy.sh脚本-这是官方的示例启动脚本,但是我没有使用
APP_NAME
:配置为我们的服务名称APP_PORT
:配置为我们的服务启动端口JAR_NAME
:打包后jar包的位置+名字JAR_NAME
:启动日志输出位置HEALTH_CHECK_URL
:健康检查URL
- start()方法时需要健康检查(我没有就注释了)
如果需要使用官方示例启动脚本可以参照官方文档
#!/bin/bash
# 修改APP_NAME为云效上的应用名
APP_NAME=application
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20 # 等待应用启动的时间
APP_PORT=8080 # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT} # 应用健康检查URL
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/target/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log #应用的启动日志
# 创建出相关目录
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
echo "Usage: $PROG_NAME {start|stop|restart}"
exit 2
}
health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ "$?" != "0" ]; then
echo -n -e "\rapplication not started"
else
echo "code is $status_code"
if [ "$status_code" == "200" ];then
break
fi
fi
sleep 1
((exptime++))
echo -e "\rWait app to pass health check: $exptime..."
if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo "starting java process"
nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
echo "started java process"
}
stop_application() {
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ ! $checkjavapid ]];then
echo -e "\rno java process"
return
fi
echo "stop java process"
times=60
for e in $(seq 60)
do
sleep 1
COSTTIME=$(($times - $e ))
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ $checkjavapid ]];then
kill -9 $checkjavapid
echo -e "\r -- stopping java lasts `expr $COSTTIME` seconds."
else
echo -e "\rjava process has exited"
break;
fi
done
echo ""
}
start() {
start_application
#health_check
}
stop() {
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac
1.4.3.2 自定义脚本部署(本次采用)
因为没有健康检查,所以没办法知道程序是否真正构建成功需要到/home/gatewayStartLog查看部署日志
#删除上次部署包
rm -rf /home/admin/application/gateway/
echo "删除上次部署包"
#关闭指定端口的进程-这里是8089
kill -9 `netstat -nlp | grep :8089 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
wait
echo "已停止8089"
#创建一个文件夹用户存放构建包解压后的文件
mkdir -p /home/admin/application
wait
echo "创建目录/home/admin/application"
#解压构建包
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
wait
echo "解压至/home/admin/application/"
#后台启动并打印启动日志
nohup java -jar /home/admin/application/gateway/target/gateway-0.0.1-SNAPSHOT.jar > /home/gatewayStartLog 2>&1 &
echo "部署成功"
#删除构建包,下次上传的构建包不会覆盖,所以必须删除
rm -rf /home/admin/app/package.tgz
echo "删除本次构建包"
部署日志
2. 多个spring boot 项目流水线主机部署
2.1 多流水线部署
只需要重复章节1的操作重复部署多个服务即可
2.2 单流水线部署多个项目
此处我只示范启动两个项目gateway和admin-service,如果是多个再按照方法加就行
首先我们先复制之前的单流水线
2.2.1 将admin-service的打包进构建包
此时我们的构建包中就会有这两个jar包和deploy.sh
此时构建包中的内容如下
- gateway
- target/gateway-0.0.1-SNAPSHOT.jar
- deploy.sh
- admin-service
- target/admin-service-0.0.1-SNAPSHOT.jar
- deploy.sh
2.2.2 修改自定义部署脚本
脚本新增内容如下
rm -rf /home/admin/application/gateway/
rm -rf /home/admin/application/admin-service/
echo "删除上次部署包"
kill -9 `netstat -nlp | grep :8089 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
kill -9 `netstat -nlp | grep :8090 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
wait
echo "已停止8089"
echo "已停止8090"
mkdir -p /home/admin/application
wait
echo "创建目录/home/admin/application"
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
wait
echo "解压至/home/admin/application/"
nohup java -jar /home/admin/application/gateway/target/gateway-0.0.1-SNAPSHOT.jar > /home/gatewayStartLog 2>&1 &
echo "部署成功"
nohup java -jar /home/admin/application/admin-service/target/admin-service-0.0.1-SNAPSHOT.jar > /home/adminServiceStartLog 2>&1 &
echo "部署成功"
rm -rf /home/admin/app/package.tgz
echo "删除本次构建包"
执行成功后查看端口是否被占用
3. Vue项目项目流水线部署
3.1 新建Node.js流水线并添加流水线源
3.2 Node.js构建
3.2.1 构建脚本
3.2.2 打包
部署vue我们只需要把打好包的dist目录放入nginx即可,所以我们只需要将dist目录打包上传
3.3 主机部署
3.3.1 部署包下载路径
如果其他流水线部署在同一个服务器记得修改一下下载路径或者文件名不然有可能被覆盖,或者使用到其他项目的构建包
3.3.2 部署脚本
主要目的就是将我们的构建包解压到nginx的配置路径
我这里修改了nginx的路径在/home/vue-project/,你只需要修改为你的就行了
rm -rf /home/vue-project/
mkdir /home/vue-project
#解压构建的dist压缩包到指定目录
tar zxvf /home/admin/vue/package.tgz -C /home/vue-project/
#删除dist压缩包
rm -rf /home/admin/vue/package.tgz