You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 rivejä
2.0 KiB

  1. const { log } = require('console');
  2. const express = require('express');
  3. const axios = require('axios');
  4. const shell = require('shelljs');
  5. const app = express();
  6. const config = require('./config');
  7. app.use(express.json());
  8. // 身份验证中间件
  9. const authMiddleware = (req, res, next) => {
  10. // const token = req.headers['x-api-key'];
  11. // if (token !== process.env.API_KEY) {
  12. // return res.status(403).json({ error: '未授权访问' });
  13. // }
  14. next();
  15. };
  16. // 部署接口
  17. app.get('/api/doDeploy', authMiddleware, (req, res) => {
  18. let project = req.query.project;
  19. let env = req.query.env;
  20. const dir = config[env].dir;
  21. let cmd = `cd ${dir}/${project} && sh restart.sh ${project}`;
  22. const child = shell.exec(cmd, { async: true, silent: false });
  23. child.stdout.on('data', (data) => {
  24. // 实时推送日志(需配合 WebSocket 或 SSE)
  25. // console.log(`实时输出: ${data}`);
  26. });
  27. child.on('close', (code) => {
  28. console.log(`执行结束: ${code}`);
  29. });
  30. res.json({ code: 0, msg: "执行中" });
  31. })
  32. // 部署接口
  33. app.get('/api/deploy', authMiddleware, async (req, res) => {
  34. let query = req.query;
  35. console.log('query', query);
  36. //从query字符串中获取project参数
  37. let project = query.project;
  38. let env = query.env;
  39. console.log("project", project, ",env", env);
  40. if (!project) {
  41. return res.status(200).json({ code: 1, msg: 'project项目参数错误' });
  42. }
  43. if (!env) {
  44. return res.status(200).json({ code: 1, msg: 'env项目参数错误' });
  45. }
  46. const dir = config[env].dir;
  47. const ipList = config[env].ipList;
  48. //发起http请求
  49. try {
  50. let promiseAll = [];
  51. for (let ip of ipList) {
  52. promiseAll.push(axios.get(`http://${ip}:7015/api/doDeploy?project=${project}&env=${env}`));
  53. }
  54. let result = await Promise.all(promiseAll);
  55. return res.json({ code: 0, msg: `${project}部署中` });; // 将第三方 API 数据返回客户端
  56. } catch (error) {
  57. log(error);
  58. return res.status(500).json({ error: '请求失败' });
  59. }
  60. });
  61. app.listen(7015, () => console.log('服务运行中: http://localhost:7015'));