|
- const { log } = require('console');
- const express = require('express');
- const axios = require('axios');
- const shell = require('shelljs');
- const app = express();
- const config = require('./config');
- app.use(express.json());
-
- // 身份验证中间件
- const authMiddleware = (req, res, next) => {
- // const token = req.headers['x-api-key'];
- // if (token !== process.env.API_KEY) {
- // return res.status(403).json({ error: '未授权访问' });
- // }
- next();
- };
-
- // 部署接口
- app.get('/api/doDeploy', authMiddleware, (req, res) => {
- let project = req.query.project;
- let env = req.query.env;
- const dir = config[env].dir;
- let cmd = `cd ${dir}/${project} && sh restart.sh ${project}`;
- const child = shell.exec(cmd, { async: true, silent: false });
- child.stdout.on('data', (data) => {
- // 实时推送日志(需配合 WebSocket 或 SSE)
- // console.log(`实时输出: ${data}`);
- });
-
- child.on('close', (code) => {
- console.log(`执行结束: ${code}`);
- });
- res.json({ code: 0, msg: "执行中" });
- })
-
- // 部署接口
- app.get('/api/deploy', authMiddleware, async (req, res) => {
- let query = req.query;
- console.log('query', query);
- //从query字符串中获取project参数
- let project = query.project;
- let env = query.env;
- console.log("project", project, ",env", env);
- if (!project) {
- return res.status(200).json({ code: 1, msg: 'project项目参数错误' });
- }
- if (!env) {
- return res.status(200).json({ code: 1, msg: 'env项目参数错误' });
- }
- const dir = config[env].dir;
- const ipList = config[env].ipList;
- //发起http请求
- try {
- let promiseAll = [];
- for (let ip of ipList) {
- promiseAll.push(axios.get(`http://${ip}:7015/api/doDeploy?project=${project}&env=${env}`));
- }
- let result = await Promise.all(promiseAll);
- return res.json({ code: 0, msg: `${project}部署中` });; // 将第三方 API 数据返回客户端
- } catch (error) {
- log(error);
- return res.status(500).json({ error: '请求失败' });
- }
- });
-
- app.listen(7015, () => console.log('服务运行中: http://localhost:7015'));
|