# AutoDeployProject **Repository Path**: ChenBossProject/auto-deploy-project ## Basic Information - **Project Name**: AutoDeployProject - **Description**: 项目自动部署工具 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-10 - **Last Updated**: 2025-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoDeployProject #### 介绍 项目自动部署工具 这是一个基于nodejs的web项目,用于自动部署项目。 它分为两个部分: 1. 项目管理端:用于管理项目信息,包括项目名称、git地址、构建命令等。这个项目管理端是基于web的,用户可以通过浏览器访问。并且这个服务是部署在主服务器上的。 2. 项目客户端:用于自动部署项目,包括拉取代码、构建、部署等。这个项目客户端是基于nodejs的,用户可以通过浏览器访问。并且这个服务是部署在主服务器上的。 #### 软件架构 软件架构说明 使用daisyui框架,使用本地文件存储项目信息。页面使用模板引擎mustache渲染,同时引入了daisyui的css和js文件。和tailwindcss的css文件。 服务器使用koa2框架,使用本地文件存储项目信息。页面使用模板引擎mustache渲染。 服务端和客户端的通信使用websocket通信。 客户端通过项目生成的key来匹配服务端 服务端在进行构建打包生成的zip文件会存放到服务端的指定构建目录中去,然后用户来进行指定更新项目的客户端,此时客户端会进行文件的下载,然后进行解压,然后进行部署。 #### 管理端功能解析 项目管理目录结构 //用来存储项目的索引信息 projects\projects.json projects.json示例 ```json { "name": "1231", "group": "1231", "gitUrl": "3", "id": "83fd2e93-380f-4fff-bfff-ffffffffffff", "buildCommand": "4", "key": "69d49f4ac1ac81103a4121fa669a8e67", "webhook": "http://your-server.com/webhook/69d49f4ac1ac81103a4121fa669a8e67", "buildMkdir": [] } ``` 数据结构解析 name:项目名称 group:项目组 gitUrl:git地址 id:项目id请问3 buildCommand:构建命令 key:密钥是用来匹配客户端的 webhook:webhook地址也就是git的webhook地址用来接收git的webhook请求 buildMkdir:构建目录 用来管理项目配置信息 projects\{project_name}\config.json config.json示例 ```json { "name": "1231", "group": "1231", "gitUrl": "3", "gitBranch": "main", "gitUsername": "your-username", "gitPassword": "your-password", "id": "83fd2e93-380f-4fff-bfff-ffffffffffff", "buildCommand": "4", "webhook": "http://your-server.com/webhook/69d49f4ac1ac81103a4121fa669a8e67", //Server配置 "serverConfig": { "serverUrl": "http://your-server.com", "serverPort": 3000, }, "deployConfig": { "deployDir": "dist", //部署目录 "deployFile": "dist.zip", //部署文件 }, //构建配置 "buildConfig": { "buildCommand": "npm run build", "installCommand": "npm install", "isDeleteDir": true, "isRemoveNodeModules": true, "isRemoveDist": true, }, //客户端配置 "clientConfig": { "clientKey": "69d49f4ac1ac81103a4121fa669a8e67", }, } ``` 配置项目数据结构解析 name:项目名称 group:项目组 gitUrl:git地址 id:项目id buildCommand:构建命令 key:密钥是用来匹配客户端的 webhook:webhook地址也就是git的webhook地址用来接收git的webhook请求 buildConfig:构建配置 buildCommand:构建命令 installCommand:安装命令 isDeleteDir:是否删除目录 isRemoveNodeModules:是否删除node_modules isRemoveDist:是否删除dist 服务端h5页面及服务功能解析 包含 1. 项目配置 页面内容 -1项目显示列表 包含项目的名称、git地址、构建命令、构建状态、构建时间、构建日志、构建结果 支持搜索 -2项目操作: 增加、编辑、删除项目,支持进行项目构建 构建包含 -1 拉取代码- 用child_process来执行git clone -2 安装依赖-用child_process来执行npm install -3 构建-用child_process来执行npm run build -4 部署-用child_process来执行npm run deploy -5 构建日志-将构建日志写入到本地文件中 -7 客户端分发-将构建好的文件生成对应的zip文件分发到客户端 -8 客户端更新-将客户端的zip文件进行解压,然后进行部署 这些功能都是可以通过服务端进行调用 当构建完成之后,会将Dist目录中的文件进行压缩,然后通过文件传输服务传输到客户端 客户端收到文件后进行解压,然后进行部署 以下是客户端的配置文件以及注意事项 客户端的配置文件在config.json中 客户端的配置文件示例 ```json { "clientKey": "69d49f4ac1ac81103a4121fa669a8e67", "serverUrl": "http://your-server.com", "serverPort": 3000, "deployDir": "dist", //部署目录 "deployFile": "dist.zip", //部署文件 } ``` 客户端的配置文件结构解析 clientKey:客户端密钥 serverUrl:服务端地址 serverPort:服务端端口 deployDir:部署目录 deployFile:部署文件 客户端h5页面及服务功能解析分为配置和部署,日志三个部分 1基础配置 包含key ,serverUrl ,serverPort,deployDir,deployFile的配置修改 2部署 通过websocket接受到服务器的指令,进行文件的下载,然后进行解压,然后进行部署.其中要进行文件的校验,如果文件校验不通过,则进行文件的重新下载. 3日志 通过websocket接受到服务器的日志,然后进行本地文件记录,更新日志. ### 运行模式配置文件 (config/mode.json) ```json { "mode": "server | client", "serverConfig": { "port": 3000, "host": "localhost" }, "clientConfig": { "serverUrl": "http://server-address", "clientKey": "client-key", "deployDir": "deploy-directory" } } ```