现在的前端静态资源在测试, 线上环境部署起来比较繁琐, 同时也比较麻烦, 现在针对这些问题提出一些解决方案.
目前发布方式
通过fis打包, 手动压缩上传到共享目录
运维(测试)取包, 通过ftp上传到服务器
备份旧文件, 手动删除文件
将包解压到指定目录
问题:
纯体力活, 步骤繁琐, 且手动操作过多
需要对服务器部署目录有一定的了解, 对新人不友好
备份, 回滚都需要手动操作, 容易出问题
删除文件的过程中, 如有用户访问会出现页面打不开的情况
不支持非覆盖式发布
不支持差异化打包, 例如: 测试线, 预发布, 现网
解决方案
jenkins自动化部署
开发人员提交代码,gitlab触发webhook,推送信息到jenkins
jenkins根据推送的信息执行对应的job
job中的脚本clone对应的分支,调用构建工具对代码进行构建
对应指定目录, 编写脚本自动备份
使用运维脚本将构建完成的结果部署到测试/生产服务器
部署完成后, 执行指定脚本删除冗余文件
可视化自动部署
开发提交代码, 在自动化系统上填写相应的分支, 点击部署按钮
系统从指定的分支上拉取代码
执行自动化备份脚本, 对相应的项目进行备份
通过fis对拉取下来的代码进行构建, 并部署到指定目录
部署完成后, 执行指定脚本删除冗余文件
回滚
在系统相应的项目中, 找到相应的备份版本, 点击恢复
执行脚本将相应的备份包恢复到指定目录
恢复完成后, 执行指定脚本删除冗余文件
数据字典
项目数据体
{
_id: "514197562128205e66000011",
name: "情人节", //项目名称
path: "1jLwrR" //项目的主目录
branch: "jinrui_v3.0", //分支
home: "qrj/index.html", //项目首页
domain: "www.xiaoniuapp.com", //域名
type: 100, //项目类型, 100: 常规活动, 200: 固化活动, 300: 常规项目
status: 0, //状态 0: 未上线(默认状态), 100: 已上线, 200: 已下线, 300: 已删除
time: 1460430231740 //创建时间(时间戳)
}
文件数据体
{
_id: "514197562128205e66000011", //主键ID
num: 15, //文档编号
path: "common_ui_31ca387.js" //文档路径
p_num: 8, //父文档编号
type: 300, //文档类型 (枚举值 100:文件夹, 200:html文件, 300:js文件, 400:css文件, 500:图片)
project_id: "571f0a44d405a65c2b8e0255", //项目ID
extension: "js", //文档扩展名
time: 1460430231740 //创建时间(时间戳)
}
项目备份列表
{
_id: "514197562128205e66000011", // 主键
project_id: "514197562128205e66000011", //项目id
file_path: "20160526.zip", //备份包路径
time: 1460430231740, //备份时间
user: "admin" //操作用户
}
图片数据体
{
_id: "514197562128205e66000011",
file_name: "LLQouNoww8_yKZxTv71tj4DY.jpg", //图片文件名
file_path: "photo/2016/3/LLQouNoww8_yKZxTv71tj4DY.jpg", //图片路径
file_size: 10455, //文件大小
file_type: "jpg", //文件类型
type: 100, //图片类型, 100: 活动, 200: 新闻/消息, 300: 系统
time: 1460430231740 //创建时间(时间戳)
}
用户数据体
{
_id: "514197562128205e66000011",
username: "aerojin", //用户名
password: "e10adc3949ba59abbe56e057f20f883e", //密码
role_id: "514197562128205e66000011", //角色Id
time: 1460430231740 //创建时间(时间戳)
}
权限数据体
{
_id: "514197562128205e66000011", //主键
num: 1, //编号
key: 100, //外键
p_num: 0 //父类编号
name: "上传图片", //权限名称
route: "/api/remove", //权限接口
time: 1460430231740 //创建时间(时间戳)
}
角色数据体
{
_id: "514197562128205e66000011", //主键
name: "开发", //角色名称
authority: ["514197562128205e66000011", ...], //权限列表
time: 1460430231740 //创建时间(时间戳)
}
系统配置
{
_id: "514197562128205e66000011", //主键
key: "XN_UPLOAD_IMAGE_PATH", //配置key值
value: "/data/static/img/", //配置对应的值
remark: "图片上传路径", //备注
time: 1460430231740 //创建时间(时间戳)
}