前言
作为社团公众号的第一篇技术分享,笔者还是希望能给大家带来一点实用的工具或是技能,能在开发过程中实际地提高大家的效率。本文的操作步骤,在不同环境下可能产生比较大的出入,在这里提的也不是唯一解,大家可以自由发挥。
在开发中,我们经常遇到需要部署上线项目的情况,尤其是在开发流程中,前端需要与后端实现联调,就需要将后端的项目部署上线。但有时,我们的项目是需要不断更新并重新部署的,此时,不断进行代码修改->打包->上传新项目->重新运行部署
这样的流程,显然显得冗余而麻烦了,如何优雅地更新代码,降低工作量呢?
我们知道实现自动化部署有诸如Jenkins
的工具,但本文将介绍更方便快捷的模式——阿里云效流水线。
工作准备
- git环境及代码仓库
- 阿里云账号
- 公网服务器
工作原理
我们做项目重新上线部署,无非是诸如代码修改->打包->上传新项目->重新运行部署
的重复性工作,其中打包->上传新项目->重新运行部署
工作是重复性的,我们可以通过脚本来替代。
在git仓库中,我们可以使用webhook
来实现代码源的触发,当我们提交或合并代码时,git仓库可以触发webhook
,通知流水线服务器启动打包编译及部署流程,实现自动重新部署。
步骤
登录云效,新建流水线
-
在云效官网中登录或注册,即可进入到云效主页面中,点击右上角展开侧边栏,选择“流水线”,即可来到流水线的主页。
-
在流水线的主页中,点击右上角“新建流水线”,并选择好项目类型,到达流水线的配置页面
流水线设置
项目有千万种,这里我们以比较普遍的前端Vue项目和后端springboot项目为例,做一个步骤介绍
通用步骤
1. 删除测试项
进入流水线设置页面后,可以点击“测试”步骤下的两个项,在右侧的栏目中选择“删除”(如果想通过流水线的代码检测规范你的代码,并看到一堆烦人的报错的话,可以不这么做)
2. 代码源配置
点击左侧“添加流水线源”绑定你的代码仓库,若你的代码仓库为codeup代码管理
,只需要勾选“开启代码源触发”即可实现自动配置webhook
,若不是(如github/gitee),则需要在代码仓库中添加webhook
(具体操作可以自行了解)
content type
项,一定要选择json
3. 主机部署设置
选择“新的任务”,新建一个部署任务,这里选择“主机部署”
前端项目
1. 新建流水线
前端项目在前面提到的新建流水线时,可以选择Node.js-测试、构建
2. Node.js构建
点击“Nodejs构建”,若你的项目位于国外的代码托管平台,可以选择“云效中国香港构建集群”,若位于国内,即选择“云效北京构建集群”。在设置中选择合适的Nodejs版本:
设置构建命令,一般情况下如下即可:
npm install
npm run build
设置打包路径,一般情况下设置为dist
即可
3. 部署脚本设置
这里默认你已经掌握了使用nginx(包括宝塔/1Panel等管理面板)部署上线前端项目的能力
“下载路径”项可以配置为你已经部署的前端项目目录中,这里即是打包产物在主机中下载的位置,我的项目部署在/opt/web-projects/infoguard
目录中,设置如下:
在静态前端项目中,“部署脚本”的作用比较简单,只需要将已经部署的前端项目目录进行替换即可,并不需要做项目重启等操作。
这里直接在部署目录中解压指定的产物压缩包,tar
指令会直接覆盖已有的项目文件,在解压后,你也可以自行使用rm -rf
指令,对压缩包进行删除,这里的操作比较自由,可举一反三。
cd /opt/web-projects/infoguard
tar -zxvf package.tgz
后端项目
1. 新建流水线
前端项目在前面提到的新建流水线时,可以选择Java·构建、部署到阿里云ECS/自有主机
2. Java构建上传
点击“Java构建上传”,若你的项目位于国外的代码托管平台,可以选择“云效中国香港构建集群”,若位于国内,即选择“云效北京构建集群”。在设置中选择合适的java版本:
设置构建命令,若是以maven构建的springboot项目,一般情况下如下即可:
mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip
设置打包路径,设置为target/打包之后的文件名.jar
3. 部署脚本设置
此处默认你已经实现了后端项目的部署,并能够通过接口测试工具测通接口
“下载路径”项可以配置为你已经部署的后端项目所在的目录,这里即是打包产物在主机中下载的位置,我的项目部署在/home/admin/app
目录中,设置如下:
部署后端项目和静态页面不同点在于,后端项目不仅需要覆盖原有的项目文件,还需要运行。在这里我们提供一个运行脚本供大家参考,他的主要功能是检测该项目是否在运行 -> 若在运行,关闭项目 -> 替换项目包 -> 重启项目
在部署目录下新建deploy.sh
文件,在该文件中写入以下内容:
#!/bin/bash
# 这里可替换为你自己的执行程序,其他代码无需更改,绝对路径相对路径均可。
# 若使用jenkins等工具远程构建,则使用绝对路径,下面的日志输出路径同!
APP_NAME=/opt/codeup/application/account01-0.0.1-SNAPSHOT.jar
SERVER_PORT=2204
LOGS_DIR=/opt/codeup/log.txt
# 使用说明,用来提示输入参数 仅在输入错误时提示使用。
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar -Xmx1024M -Xms256M ${APP_NAME} --server.port=${SERVER_PORT} > ${LOGS_DIR} 2>&1 &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
在脚本中可以看到我们使用到log.txt
,这是项目运行日志存放的位置,所以在运行脚本前,也需要在运行目录下新建一个log.txt
(内容为空即可)备用
这里直接在部署目录中解压指定的产物压缩包,tar
指令会直接覆盖已有的项目文件,在解压后,你也可以自行使用rm -rf
指令,对压缩包进行删除。接下来使用sh
对后端项目进行重启:
mkdir -p /home/admin/application
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart
总结
至此,你已经大致完成了云效流水线的配置,只需要向git仓库推送代码,坐等几分钟,你的新项目就可以被部署完成啦。云效流水线还有许多值得研究的配置,大家可以自己探索探索,本文的主要意图,还是向大家介绍这样一个实用的工具,具体如何使用,还是需要各位自由发挥!