摘要:干脆寫一個自動鏈接服務器,并上傳文件,然后解壓的操作吧。開始上傳全部執行完畢以下是的代碼,原作者,網上找的代碼,忘了留原始鏈接。需要配置一個私鑰路徑,即可鏈接服務器了。
這幾天,有一個臨時項目,每次發布,都要我本地手動zip,上傳fpt,然后shell unzip.
搞得頭大,不勝其煩。
我是個懶人,這明顯不是我的風格。
干脆nodejs寫一個自動鏈接服務器,并上傳文件,然后解壓的操作吧。
/** * Created by jsoncode on 2019/4/25. */ var clientServer = require("./clientServer"); var ip = [ "127.0.0.1"http://server ip ]; var filename = "test.zip"; var localPaht = "./a/b/"; var serverPath = "/home/a/b/"; var newDirName = "www"; var timestr = dateFormat("yyyy-MM-dd_HH.mm.ss"); var cmd = [ `mkdir ${serverPath}${newDirName}`, `mv ${serverPath}${filename} ${serverPath}${newDirName}/`, `unzip ${serverPath}${newDirName}/${filename} -d ${serverPath}${newDirName}/`, `rm -f ${serverPath}${newDirName}/${filename}`, `mv ${serverPath}${newDirName} ${serverPath}${newDirName}-${timestr}`, `mv ${serverPath}${newDirName} ${serverPath}${newDirName}`, ]; var cmdIndex = 0; new Promise(function (success,error) { console.log("開始上傳") clientServer.putFiles(ip,filename, localPaht, serverPath,function (msg) { console.log(msg); success() }) }) .then(function () { loopCmd(0,true); }) function loopCmd(index,indeep) { if (index>=cmd.length) {console.log("全部執行完畢");return;} var c = cmd[index]; console.log(c); clientServer.cmdShell2(c,ip,function (result) { console.log(result); if (indeep) { index++; loopCmd(index,indeep); } }) } function dateFormat(formatString,date){ var date = date||new Date(); var o = { Y: date.getFullYear(), M: date.getMonth() + 1, D: date.getDate(), H: date.getHours(), m: date.getMinutes(), S: date.getSeconds() }; for (var i in o) { if (o.hasOwnProperty(i)) { if (o[i] < 10) { o[i] = "0" + o[i]; } } } var formatString = formatString || "yyyy/MM/dd HH:mm:ss"; var reg = new RegExp("[Yy]+|M+|[Dd]+|[Hh]+|m+|[Ss]+", "g"); var regM = new RegExp("m"); var regY = new RegExp("y", "i"); return formatString.replace(reg, function(v) { var old = v; if (regM.test(v)) { old = o.m; } else if (regY.test(v)) { var y = "" + o.Y; var le = y.length - (v.length == 1 ? 2 : v.length); old = y.substring(y.length, le) } else { var key = v.toUpperCase().substr(0, 1); old = o[key]; } return old; }); }
以下是clientServer.js的代碼,原作者kevalin,網上找的代碼,忘了留原始鏈接。這里給作者說一聲抱歉。
需要配置一個私鑰路徑,即可鏈接服務器了。
/** * Created by kevalin on 2015/4/27. */ var async = require("async"); var SSH2Utils = require("ssh2-utils"); var fs = require("fs"); var ssh = new SSH2Utils(); var privateKey = "../xxx.pem"; /* exec linux shell on remote-servers ---------------------------------------------------------------------------------------------- */ exports.cmdShell2 = function(cmd, ips, callback) { if(!cmd || !ips || !ips.length) { console.log("cmdShell2 ERR - 缺少參數") } else { var results = []; async.waterfall([ function(cb1) { var servers = []; for(var i = 0; i < ips.length; i++) { var _server = {}; _server["host"] = ips[i]; _server["username"] = "root"; _server["privateKey"] = fs.readFileSync(privateKey); servers.push(_server) } cb1(null, servers) }, function(servers, cb1) { async.each(servers, function(server, cb2) { var _result = {}; ssh.exec(server, cmd, function(err, stdout, stderr, server, conn) { if (err) throw err; _result["ip"] = server.host; _result["cmdResult"] = stdout.replace(" ", "").replace(" ", ""); results.push(_result); conn.end() cb2() }) }, function(err) { cb1(err, results) }) } ], function(err, result) { if (err) throw err; callback(result) }) } } /* put file to remote-servers function ---------------------------------------------------------------------------------------------- */ exports.putFiles = function(ips, filename, localPath, remotePath, callback) { if (!ips || !filename || !remotePath || !localPath) { console.log("putFiles ERR - 缺少參數") } else { async.waterfall([ function(cb1) { var servers = []; for(var i = 0; i < ips.length; i++) { var _server = {}; _server["host"] = ips[i]; _server["username"] = "root"; _server["privateKey"] = fs.readFileSync(privateKey); servers.push(_server) } cb1(null, servers) }, function(servers, cb1) { async.each(servers, function(server, cb2) { var _localFile = localPath + filename; var _remoteFile = remotePath + filename; ssh.putFile(server, _localFile, _remoteFile, function(err, server, conn) { if (err) { console.log(err) } conn.end(); cb2() }) }, function(err) { cb1() }) } ], function(err, result) { if (err) throw err; callback("put file success!!!") }) } }
我現在只需要吧代碼打包成zip,就行了,然后執行:
node index.js
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103861.html
摘要:就是在提測前部署一個預覽環境,在提測前,每個人本地驗證一遍,再放在預覽環境驗證一遍。于是就準備啪啪啪擼一個完成自動發布預覽環境的工具。用來直接把已經好的文件發布到預覽環境。這樣以后組里的其他同事也都可以用一行命令自己部署預覽環境了。 場景 進入公司一段時間了。流程還是不太讓人省心。就在上個提測版本的質量還是沒法保證,總是或多或少出現一些問題。于是就想到了上家公司的一個做法。就是在提測前...
摘要:首先關于遠程服務器的登錄入口,默認系統的用戶名是然后登錄密碼可以在控制臺進行修改。這里也可以通過自己配置服務器的鉤子函數,使其自動更新代碼,我還沒配置,就先不說了。上午編輯的文章 下午更新下 安裝環境 因為服務器默認 linux 系統,所以這里講怎么配置 linux 云服務環境。 我第一次使用的時候,還以為是要去安裝一個界面化桌面,以便我這個命令小白可以操作。但是,對于只有2G 的內存來說安...
閱讀 3968·2021-11-16 11:44
閱讀 5189·2021-10-09 09:54
閱讀 2031·2019-08-30 15:44
閱讀 1678·2019-08-29 17:22
閱讀 2753·2019-08-29 14:11
閱讀 3389·2019-08-26 13:25
閱讀 2324·2019-08-26 11:55
閱讀 1595·2019-08-26 10:37