更新服务
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 express = require('express')
 | 
				
			||||||
const db = require('./utils/dbUitls')
 | 
					const db = require('./src/utils/dbUitls')
 | 
				
			||||||
const rest = require('./rest')
 | 
					const rest = require('./src/rest')
 | 
				
			||||||
const app = express()
 | 
					const app = express()
 | 
				
			||||||
const port = 12525
 | 
					const port = 12525
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
  "description": "node服务端",
 | 
					  "description": "node服务端",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "dev": "forever -w index.js",
 | 
					    "dev": "forever -w --watchDirectory src index.js ",
 | 
				
			||||||
    "pro": "forever start index.js"
 | 
					    "pro": "forever start index.js"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
@@ -20,6 +20,7 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "author": "kubbo",
 | 
					  "author": "kubbo",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "archiver": "^5.3.0",
 | 
				
			||||||
    "express": "^4.17.3",
 | 
					    "express": "^4.17.3",
 | 
				
			||||||
    "fs-extra": "^10.0.1",
 | 
					    "fs-extra": "^10.0.1",
 | 
				
			||||||
    "helmet": "^5.0.2",
 | 
					    "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 => {
 | 
					    dbUtils.query(sql).then(res => {
 | 
				
			||||||
      let info = res?.[0]
 | 
					      let info = res?.[0]
 | 
				
			||||||
      if (info?.id) {
 | 
					      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信息"})
 | 
					      } else response.send({code: 1, err: "无法找到git信息"})
 | 
				
			||||||
    }).catch(err => {
 | 
					    }).catch(err => {
 | 
				
			||||||
      console.log(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");
 | 
					const {findFile} = require("../utils/fsUtils");
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  init: ins => {
 | 
					  init: ins => {
 | 
				
			||||||
    return findFile('./rest', file => {
 | 
					    return findFile('./src/rest', file => {
 | 
				
			||||||
      if (!/index\.js/.test(file)) {
 | 
					      if (!/index\.js/.test(file)) {
 | 
				
			||||||
        let rest = require(file.replace(/rest/, '.'))
 | 
					        let rest = require(file.replace(/src[\\\/]rest/, '.'))
 | 
				
			||||||
        console.log(`初始化接口...${rest.action}`)
 | 
					        console.log(`初始化接口:${rest.action}`)
 | 
				
			||||||
        if (rest.method == "post") {
 | 
					        if (rest.method == "post") {
 | 
				
			||||||
          ins.post(rest.action, (req, res) => rest.execute(req, res))
 | 
					          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