UNPKG

pomy

Version:

Based on the concept of a project object model (POM), POMY can manage a project's build, reporting and documentation from a central piece of information.

333 lines (276 loc) 8.12 kB
'use strict'; var gulp = require('gulp'), gutil = require('gulp-util'), path = require('path'), spawn = require('child_process').spawn, exec = require('child_process').exec; gulp.task('restart', ['stop'], function(cb) { var command = "", args = []; if (process.platform === "win32") { command = "cmd"; args.push("/c"); } else { command = "node"; } args.push(global.getCommandPath('gulp')) args.push("start"); args.push('--process'); args.push("child"); var startup = spawn(command, args, { cwd: path.join(global.settings.cwd), stdio: 'inherit' }); startup.on('close', function(code) { if (code !== 0) { console.log('site restart process exited with code: ' + code + "."); cb(code); } else { cb(); } }); }); gulp.task('rebuild', ['delete'], function(cb) { var command = "", args = []; if (process.platform === "win32") { command = "cmd"; args.push("/c"); } else { command = "node"; } args.push(global.getCommandPath('gulp')) args.push("start"); args.push('--process'); args.push("child"); var startup = spawn(command, args, { cwd: path.join(global.settings.cwd), stdio: 'inherit' }); startup.on('close', function(code) { if (code !== 0) { console.log('site rebuild process exited with code: ' + code + "."); cb(code); } else { cb(); } }); }); gulp.task('delete', ['config'], function(cb) { var settings = global.settings, name = settings.name, version = settings.version, target = gutil.env.target || settings.target || 'local', dSite = settings.deploy[target] || {}; var site = { user: gutil.env.user || dSite.user || 'root', ips: gutil.env.ips || dSite.ips || ['127.0.0.1'], port: gutil.env.port || dSite.port || '80', domain: gutil.env.domain || dSite.domain || 'localhost', nohup: gutil.env.nohup || dSite.nohup || false, }; for (var i = 0, j = 0, len = 1 /*site.ips.length*/ ; i < len; i++) { var user = site.user; var ip = site.ips[i]; var port = site.port; var nohup = site.nohup || false; var domain = site.domain; if (!user || !ip) { cb("请指定服务器地址和登录用户名。"); return; } var remote = ip !== '127.0.0.1' && ip !== 'localhost'; var command = ""; if (process.platform === "win32") { command = "cmd /c "; } var ssh = user + "@" + ip; var opr = command; if (remote) { opr += " ssh " + ssh + " \""; } if (remote && nohup) { var dest = (user === "root" ? "/root" : "/home/" + user) + "/var/" + domain + "/"; var folder = dest + name + "/current/" /* version + "/" */ ; opr += "cd " + folder + " && ./node_modules/pm2/bin/pm2 delete " + name; } else { j++; if (j == len) { cb(); } continue; } if (remote) { opr += "\""; } exec(opr, {}, function(err, stdout, stderr) { j++; console.log(stdout); // if (err) { // return cb(err); // } if (j == len) { cb(); } }); } }); gulp.task('stop', ['config'], function(cb) { var settings = global.settings, name = settings.name, version = settings.version, target = gutil.env.target || settings.target || 'local', dSite = settings.deploy[target] || {}; var site = { user: gutil.env.user || dSite.user || 'root', ips: gutil.env.ips || dSite.ips || ['127.0.0.1'], port: gutil.env.port || dSite.port || '80', domain: gutil.env.domain || dSite.domain || 'localhost', nohup: gutil.env.nohup || dSite.nohup || false, }; for (var i = 0, j = 0, len = 1 /*site.ips.length*/ ; i < len; i++) { var user = site.user; var ip = site.ips[i]; var port = site.port; var nohup = site.nohup || false; var domain = site.domain; if (!user || !ip) { cb("请指定服务器地址和登录用户名。"); return; } var remote = ip !== '127.0.0.1' && ip !== 'localhost'; var command = ""; if (process.platform === "win32") { command = "cmd /c "; } var ssh = user + "@" + ip; var opr = command; if (remote) { opr += " ssh " + ssh + " \""; } if (remote && nohup) { var dest = (user === "root" ? "/root" : "/home/" + user) + "/var/" + domain + "/"; var folder = dest + name + "/current/" /* version + "/" */ ; opr += "cd " + folder + " && ./node_modules/pm2/bin/pm2 stop " + name; } else { // opr += "netstat -pan" + // " | grep " + port + // " | grep -v grep | grep LISTEN" + // " | awk '{print \\\$7}'" + // " | cut -d/ -f1" + // " | sed -e 's/^/kill -9 /g'" + // " | sh -"; opr += "/usr/sbin/lsof -i tcp:" + port + " | grep -v grep | grep LISTEN" + " | awk '{print " + (remote ? "\\\$2" : "$2") + "}'" + " | sed -e 's/^/kill -9 /g'" + " | sh -"; } if (remote) { opr += "\""; } exec(opr, {}, function(err, stdout, stderr) { j++; console.log(stdout); if (err) { return cb(err); } if (j == len) { cb(); } }); } }); gulp.task('start', ['config'], function(cb) { var settings = global.settings, name = settings.name, version = settings.version, debug = gutil.env.debug || settings.debug || false, target = gutil.env.target || settings.target || 'local', dSite = settings.deploy[target] || {}; var site = { user: gutil.env.user || dSite.user || 'root', ips: gutil.env.ips || dSite.ips || ['127.0.0.1'], domain: gutil.env.domain || dSite.domain || 'localhost', port: gutil.env.port || dSite.port || "80", nohup: gutil.env.nohup || dSite.nohup || false, }; for (var i = 0, j = 0, len = 1 /*site.ips.length*/ ; i < len; i++) { var user = site.user; var ip = site.ips[i]; var port = site.port || '8421'; var nohup = site.nohup || false; var domain = site.domain; if (!user || !ip) { cb("请指定服务器地址和登录用户名。"); return; } var remote = ip !== '127.0.0.1' && ip !== 'localhost'; if (!remote) { var command = null, args = []; if (process.platform === "win32") { command = "cmd"; args.push("/c"); args.push("node"); } else { command = "node"; } args.push("./startup"); args.push('--ip'); args.push(ip); args.push('--port'); args.push(port); args.push('--target'); args.push(target); args.push('--debug'); args.push(debug); var startup = spawn(command, args, { cwd: path.resolve(global.getRootPath()), stdio: 'inherit' }); startup.on('close', function(code) { if (code !== 0) { console.log('site startup process exited with code: ' + code + '.'); cb(code); } else { cb(); } }); } else { var ssh = user + "@" + ip; var dest = (user === "root" ? "/root" : "/home/" + user) + "/var/" + domain + "/"; var command = ""; if (process.platform === "win32") { command = "cmd /c "; } var folder = dest + name + "/current/" /* version + "/" */ ; var opr = command + " ssh " + ssh + " \"cd " + folder + " && " + (nohup ? " ./node_modules/pm2/bin/pm2 start ./startup.json " + (debug ? "" : "--env production") // --node-args \\\"ip='" + ip + "' port='" + port + "' target='" + target + "' debug=" + debug + "\\\"" : : " node ./startup.js --ip " + ip + " --port " + port + " --target " + target + " --debug " + debug) + "\""; exec(opr, { maxBuffer: 16000 * 1024 }, function(err, stdout, stderr) { j++; // console.log(stdout); if (err) { return cb(err); } if (j == len) { cb(); } }); } } }); gulp.task('run', ['start'], function(cb) { cb(); });