Skip to content

twenis/mp_release_platform

 
 

Repository files navigation

小程序发布平台

有问题欢迎在issues中提出

1 背景

😈 如果你同时维护着多个小程序项目,那你每天是否花费了大量的时间在做这样一件时间,切换git分支 -> 执行编译 -> 打开小程序开发者工具 -> 发布。
🧐 同时维护着5个小程序(两个微信小程序、两个支付宝小程序、一个字节跳动小程序),我发现我每天要花大量的时间做发布小程序的工作。为此我想到了打造一个类似Jenkins的小程序自动化构建平台,将发布小程序的任务移交给测试同事(是的,我就是这么懒)。

2 项目界面介绍

tips: 图片无法加载的话,可以下载项目后看read-image文件夹

2.1 登录页

登录界面

2.2 主页

主页

2.3 主页带备注

主页带备注

2.4 发布预览

发布预览

2.5 发布体验版

发布体验版

3 功能介绍

  • 目前支持发布微信小程序、支付宝小程序、字节跳动小程序
  • 角色划分为超级管理员、管理员、开发/运营/测试、普通用户
    • 超级管理员与管理员具备所有功能,其中超级管理员账号不可被删除
      • 具备用户管理功能,包括用户的增、删、查、改
      • 具备发布任务管理功能,包括任务的删、查功能
      • 具备发布预览、发布体验版功能
      • 具备修改用户个人信息功能
    • 开发/运营/测试
      • 具备发布预览、发布体验版功能
      • 具备修改用户个人信息功能
    • 普通用户
      • 只具备查看发布记录与小程序二维码功能

4 技术概览

该项目后端采用nestjs + typescript技术,ORM使用sequelize,数据库采用mysql。前端采用vue2全家桶,搭配SSR技术,通过socket广播发布日志到所有前端用户中。

技术详解请看(二次开发必看): 开发须知

原理教程请看

5 启动项目

5.1 本地开发时需要修改项目配置文件(部署到服务器中,不需要修改)

在/lib/configure文件中将redisCFG与mysql字段中的配置改为自己的配置,主要修改host字段即可

{
  // redis用户记录session数据,不使用的话可以在/server/server.ts文件中找到session中间件,并注释掉store字段,即可删除所有与redisCFG配置相关的内容
  // 配置含义见connect-redis库
  redisCFG: {
    prefix: 'mp_release_platform_sess:',
    host: '0.0.0.0',
    port: 6379,
    db: 8,
  },
  // 配置含义见sequelize库
  mysql: {
    port: 3306,
    host: '0.0.0.0',
    user: 'mp',
    password: 'mp2020',
    database: 'mp_release_platform',
    connectionLimit: 10,
  },
}

5.2 修改小程序配置文件

找到/server/utils/CI/utils/ci-configure.ts文件,按照注释修改配置即可

5.3 安装依赖并运行

# cd至项目根路径
# 安装所需包
npm i

# 新建终端(command + t),并运行redis
redis-server

# 运行项目
npm run start:dev

# 浏览器中访问 http://localhost:8088 or https://localhost:8089

6 项目部署说明

部署项目需要先安装docker,安装完成后再继续下面的步骤

# 自行安装git并设置好github的SSH
# 克隆小程序自动化构建平台项目
git clone [email protected]:lizijie123/mp_release_platform.git
# 进入项目目录
cd mp_release_platform
# 将小程序自动化构建平台打包为docker镜像
make
# 通过docker服务编排同时生成并启动,小程序自动化构建平台容器、redis容器、mysql容器
docker-compose up

7 常见问题

7.1 数据库数据是乱码

创建mysql的容器之前,需要设置字符集为utf8

# 完整配置
mysql:
    restart: always
    image: mysql:5.6
    volumes:
        - ./data:/var/lib/mysql
    command: [
      '--character-set-server=utf8',
      '--collation-server=utf8_general_ci',
      --default-authentication-plugin=mysql_native_password,
    ]
    environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=mp_release_platform
        - MYSQL_USER=mp
        - MYSQL_PASSWORD=mp2020
    ports:
        - "3306:3306"

对于已经创建了mysql容器的项目,只需要进入mysql中,删掉数据库并重新创建一个即可

# 单独启动mysql
docker-compose up -d mysql
# 查看mysql容器的id
docker ps
# 进入mysql容器
docker exec -it mysql容器id bash
# 连接mysql
mysql -ump -pmp2020
# 删除数据库
DROP DATABASE mp_release_platform
# 创建数据库并执行字符集
CREATE DATABASE mp_release_platform DEFAULT CHARSET utf8 COLLATE utf8_general_ci

7.2 拉取gitlab项目超时

公司gitlab一般只允许内网访问,部署在云服务器上的项目会出现无法访问gitlab项目的问题,需要运维同事帮忙在gitlab项目中设置访问白名单。

7.2 package.json中的devDependencies的包没有安装

当环境变量NODE_ENV为production时(也就是我们的小程序自动化构建平台这个项目运行时,设置的NODE_ENV),npm install或yarn install只会安装dependencies,而不会安装devDependencies列表中的包,需要将安装命令改为npm install --dev或yarn install --production=false

7.3 编译项目过程中出现内存溢出问题

  • 报错日志: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

首先排查k8s分配给docker容器的内存大小是否足够,若k8s分配给docker容器的内存足够大,依然报内存溢出,则可能是系统分配给node的内存不足(tips: 分配给node程序的内存64位系统下约为1.4GB,32位系统下约为0.7GB),这时候可以通过increase-memory-limit这个包解决。

8 作者

github: lizijie123

About

小程序自动化构建平台

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 35.8%
  • Vue 27.8%
  • TypeScript 27.3%
  • SCSS 7.9%
  • Makefile 0.8%
  • HTML 0.3%
  • Shell 0.1%