更新服务
This commit is contained in:
		
							
								
								
									
										1
									
								
								.foreverignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.foreverignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
/zips/
 | 
			
		||||
							
								
								
									
										4
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								index.js
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
const express = require('express')
 | 
			
		||||
const db = require('./utils/dbUitls')
 | 
			
		||||
const rest = require('./rest')
 | 
			
		||||
const db = require('./src/utils/dbUitls')
 | 
			
		||||
const rest = require('./src/rest')
 | 
			
		||||
const app = express()
 | 
			
		||||
const port = 12525
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
  "description": "node服务端",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "forever -w index.js",
 | 
			
		||||
    "dev": "forever -w --watchDirectory src index.js ",
 | 
			
		||||
    "pro": "forever start index.js"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
@@ -20,6 +20,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "author": "kubbo",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "archiver": "^5.3.0",
 | 
			
		||||
    "express": "^4.17.3",
 | 
			
		||||
    "fs-extra": "^10.0.1",
 | 
			
		||||
    "helmet": "^5.0.2",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
const dbUtils = require("../../utils/dbUitls");
 | 
			
		||||
const fse = require("fs-extra");
 | 
			
		||||
module.exports = {
 | 
			
		||||
  action: "/node/autodeploy/download",
 | 
			
		||||
  method: "post",
 | 
			
		||||
  execute: (request, response) => {
 | 
			
		||||
    let id = request.query?.id, sql = `select * from node_autodeploy where id='${id}'`
 | 
			
		||||
    dbUtils.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        response.send({code: 0})
 | 
			
		||||
        fse.emptyDir('../zips/dist', err => {
 | 
			
		||||
          if (!err) {
 | 
			
		||||
            execute(`cd ../zips&&git clone ${info.git} ./dist`)
 | 
			
		||||
            .then(() => execute(`cd ../zips/dist&&git checkout ${info.branch}`))
 | 
			
		||||
            .then(() => execute(`cd ../zips/dist&&npm i&&npm run build`))
 | 
			
		||||
            .catch(err => {
 | 
			
		||||
              console.log(err)
 | 
			
		||||
            })
 | 
			
		||||
          } else {
 | 
			
		||||
            console.log(err)
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
      response.send({code: 1, err: err.sqlMessage})
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,39 +0,0 @@
 | 
			
		||||
const dbUtils = require("../../utils/dbUitls");
 | 
			
		||||
const {exec} = require("child_process");
 | 
			
		||||
const fse = require('fs-extra')
 | 
			
		||||
const execute = cmd => new Promise((resolve, reject) => {
 | 
			
		||||
  exec(cmd, (err, stdout) => {
 | 
			
		||||
    if (!err) {
 | 
			
		||||
      console.log(stdout)
 | 
			
		||||
      resolve()
 | 
			
		||||
    } else reject(err)
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
module.exports = {
 | 
			
		||||
  action: "/node/autodeploy/getZip",
 | 
			
		||||
  method: "post",
 | 
			
		||||
  execute: (request, response) => {
 | 
			
		||||
    let id = request.query?.id, sql = `select * from node_autodeploy where id='${id}'`
 | 
			
		||||
    dbUtils.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        response.send({code: 0})
 | 
			
		||||
        fse.emptyDir('../zips/' + info.id, err => {
 | 
			
		||||
          if (!err) {
 | 
			
		||||
            execute(`cd ../zips&&git clone ${info.git} ./${info.id}`)
 | 
			
		||||
            .then(() => execute(`cd ../zips/${info.id}&&git checkout ${info.branch}`))
 | 
			
		||||
            .then(() => execute(`cd ../zips/${info.id}&&npm i&&npm run build`))
 | 
			
		||||
            .catch(err => {
 | 
			
		||||
              console.log(err)
 | 
			
		||||
            })
 | 
			
		||||
          } else {
 | 
			
		||||
            console.log(err)
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
      response.send({code: 1, err: err.sqlMessage})
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -8,7 +8,10 @@ module.exports = {
 | 
			
		||||
    dbUtils.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        response.send({code: 0})
 | 
			
		||||
        fse.pathExists(`zips/${info.id}/dist`, (err, exists) => {
 | 
			
		||||
          console.log(`zips/${info.id}/dist=========>${exists}`)
 | 
			
		||||
          response.send({code: 0, data: exists})
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
							
								
								
									
										40
									
								
								src/rest/autodeploy/download.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/rest/autodeploy/download.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
const dbUtils = require("../../utils/dbUitls");
 | 
			
		||||
const archiver = require("archiver")
 | 
			
		||||
const fse = require("fs-extra");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
module.exports = {
 | 
			
		||||
  action: "/node/autodeploy/download",
 | 
			
		||||
  method: "post",
 | 
			
		||||
  execute: (request, response) => {
 | 
			
		||||
    let id = request.query?.id, sql = `select * from node_autodeploy where id='${id}'`
 | 
			
		||||
    dbUtils.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        let path = `zips/${info.id}/dist`, zipPath = `./zips/${info.id}.zip`
 | 
			
		||||
        fse.removeSync(zipPath)
 | 
			
		||||
        fse.pathExists(path, (err, exists) => {
 | 
			
		||||
          console.log(`${path}=========>${exists}`)
 | 
			
		||||
          if (exists) {
 | 
			
		||||
            let output = fs.createWriteStream(zipPath),
 | 
			
		||||
                arc = archiver('zip')
 | 
			
		||||
            arc.on('error', err => {
 | 
			
		||||
              response.send({code: 1, err})
 | 
			
		||||
            })
 | 
			
		||||
            arc.on('progress', (e) => {
 | 
			
		||||
              console.log('%s压缩进度...%s/%s', info.id, e.entries.processed, e.entries.total)
 | 
			
		||||
            })
 | 
			
		||||
            arc.pipe(output)
 | 
			
		||||
            arc.directory(path, false)
 | 
			
		||||
            arc.finalize().then(() => {
 | 
			
		||||
              console.log('压缩完成!')
 | 
			
		||||
              response.download(zipPath, `${info.id}.zip`)
 | 
			
		||||
            })
 | 
			
		||||
          } else response.send({code: 1, err: "没有打包文件!"})
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
      response.send({code: 1, err: err.sqlMessage})
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								src/rest/autodeploy/getZip.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/rest/autodeploy/getZip.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
const db = require("../../utils/dbUitls");
 | 
			
		||||
const zip = require("../../tools/zipProject")
 | 
			
		||||
module.exports = {
 | 
			
		||||
  action: "/node/autodeploy/getZip",
 | 
			
		||||
  method: "post",
 | 
			
		||||
  execute: (request, response) => {
 | 
			
		||||
    let id = request.query?.id, sql = `select * from node_autodeploy where id='${id}'`
 | 
			
		||||
    db.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        setTimeout(() => {
 | 
			
		||||
          response.send({code: 0})
 | 
			
		||||
        }, 2000)
 | 
			
		||||
        zip(info).then(() => {
 | 
			
		||||
          db.query(`update node_autodeploy set download='${new Date()}' where id='${info.id}'`)
 | 
			
		||||
        }).catch(err => {
 | 
			
		||||
          console.log(err)
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
      response.send({code: 1, err: err.sqlMessage})
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								src/rest/autodeploy/updateSystem.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/rest/autodeploy/updateSystem.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
const dbUtils = require("../../utils/dbUitls");
 | 
			
		||||
const zip = require("../../tools/zipProject");
 | 
			
		||||
const db = require("../../utils/dbUitls");
 | 
			
		||||
const exec = require("../../tools/exec")
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  action: "/node/autodeploy/updateSystem",
 | 
			
		||||
  method: "post",
 | 
			
		||||
  execute: (request, response) => {
 | 
			
		||||
    let id = request.query?.id, sql = `select * from node_autodeploy where id='${id}'`
 | 
			
		||||
    dbUtils.query(sql).then(res => {
 | 
			
		||||
      let info = res?.[0]
 | 
			
		||||
      if (info?.id) {
 | 
			
		||||
        setTimeout(() => {
 | 
			
		||||
          response.send({code: 0})
 | 
			
		||||
        }, 2000)
 | 
			
		||||
        zip(info).then(() => {
 | 
			
		||||
          db.query(`update node_autodeploy set download='${new Date()}' where id='${info.id}'`)
 | 
			
		||||
          exec(`cp -r zips/${info.id}/dist ${info.target}`).then(() => {
 | 
			
		||||
            console.log("部署完毕!")
 | 
			
		||||
          })
 | 
			
		||||
        })
 | 
			
		||||
      } else response.send({code: 1, err: "无法找到git信息"})
 | 
			
		||||
    }).catch(err => {
 | 
			
		||||
      console.log(err)
 | 
			
		||||
      response.send({code: 1, err: err.sqlMessage})
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
const {findFile} = require("../utils/fsUtils");
 | 
			
		||||
module.exports = {
 | 
			
		||||
  init: ins => {
 | 
			
		||||
    return findFile('./rest', file => {
 | 
			
		||||
    return findFile('./src/rest', file => {
 | 
			
		||||
      if (!/index\.js/.test(file)) {
 | 
			
		||||
        let rest = require(file.replace(/rest/, '.'))
 | 
			
		||||
        console.log(`初始化接口...${rest.action}`)
 | 
			
		||||
        let rest = require(file.replace(/src[\\\/]rest/, '.'))
 | 
			
		||||
        console.log(`初始化接口:${rest.action}`)
 | 
			
		||||
        if (rest.method == "post") {
 | 
			
		||||
          ins.post(rest.action, (req, res) => rest.execute(req, res))
 | 
			
		||||
        }
 | 
			
		||||
							
								
								
									
										10
									
								
								src/tools/exec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/tools/exec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
const {exec} = require("child_process");
 | 
			
		||||
const execute = cmd => new Promise((resolve, reject) => {
 | 
			
		||||
  exec(cmd, (err, stdout) => {
 | 
			
		||||
    if (!err) {
 | 
			
		||||
      console.log(stdout)
 | 
			
		||||
      resolve()
 | 
			
		||||
    } else reject(err)
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
module.exports = execute
 | 
			
		||||
							
								
								
									
										21
									
								
								src/tools/zipProject.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/tools/zipProject.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
const fse = require("fs-extra");
 | 
			
		||||
const execute = require("./exec")
 | 
			
		||||
module.exports = info => {
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
    fse.emptyDir(`zips/${info.id}`, err => {
 | 
			
		||||
      if (!err) {
 | 
			
		||||
        execute(`cd zips&&git clone ${info.git} ./${info.id}`)
 | 
			
		||||
        .then(() => execute(`cd zips/${info.id}&&git checkout ${info.branch}`))
 | 
			
		||||
        .then(() => execute(`cd zips/${info.id}&&npm i&&npm run build`))
 | 
			
		||||
        .then(() => resolve())
 | 
			
		||||
        .catch(errs => {
 | 
			
		||||
          console.log(errs)
 | 
			
		||||
          reject(errs)
 | 
			
		||||
        })
 | 
			
		||||
      } else {
 | 
			
		||||
        reject(err)
 | 
			
		||||
        console.log(err)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user