如何自动化部署项目?折腾服务器之旅~

2020-06-17 06:53:02易采站长站整理

本篇文章讲的不是如何把一个项目部署上线,而是如何自动化上线。

开发了一个需求管理和发布系统。

通过这个系统,可以创建需求、创建发布计划、创建分支、部署到测试环境、部署到生产环境、正式上线、合并代码等。

一、功能设计

9.9元的阿里云服务器真的很慢,但还是足够折腾完这个项目。
用3个目录来模拟不同的环境。

目录存放
project存放所有的项目,比如本系统的前后端代码。
pre-dir预发环境,当然是用来测试的。
pro-dir生产环境,测试没问题,部署上线。

一图胜千言。

二、系统页面

我的任务

接到一个新的需求,可以新建一个需求,并创建开发分支。

发布队列

开发结束之后,便可以到发布队列中,部署到预发环境进行测试。 测试通过指定Cookie 就可以访问到测试的代码。最终再进行线上部署。

 

项目信息

 

二、技术栈

前端技术栈
Vue + elementUI,具体代码在Github,感兴趣的可以看下并点个star哈~✨
服务端技术栈
非常常见的Node.js(Koa2) + Mysql + Redis + Pm2。
具体代码在Github,感兴趣的可以看下并点个star哈~✨

三、Redis和Session配置

 


// utils/Store.js
const Redis = require("ioredis");
const { Store } = require("koa-session2");

class RedisStore extends Store {
constructor() {
super();
this.redis = new Redis();
}

async get(sid, ctx) {
let data = await this.redis.get(`SESSION:${sid}`);
return JSON.parse(data);
}

async set(session, { sid = this.getID(24), maxAge = 1000 * 60 * 60 } = {}, ctx) {
try {
console.log(`SESSION:${sid}`);
// Use redis set EX to automatically drop expired sessions
await this.redis.set(`SESSION:${sid}`, JSON.stringify(session), 'EX', maxAge / 1000);
} catch (e) {}
return sid;
}

async destroy(sid, ctx) {
return await this.redis.del(`SESSION:${sid}`);