国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端工程師通過nodejs鏈接linux,并上傳代碼進行半自動化更新,省去ssh+ftp的鏈接工具

leanxi / 2591人閱讀

摘要:干脆寫一個自動鏈接服務器,并上傳文件,然后解壓的操作吧。開始上傳全部執行完畢以下是的代碼,原作者,網上找的代碼,忘了留原始鏈接。需要配置一個私鑰路徑,即可鏈接服務器了。

這幾天,有一個臨時項目,每次發布,都要我本地手動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

相關文章

  • 基于 vue-cli 前端項目自動發布預覽環境

    摘要:就是在提測前部署一個預覽環境,在提測前,每個人本地驗證一遍,再放在預覽環境驗證一遍。于是就準備啪啪啪擼一個完成自動發布預覽環境的工具。用來直接把已經好的文件發布到預覽環境。這樣以后組里的其他同事也都可以用一行命令自己部署預覽環境了。 場景 進入公司一段時間了。流程還是不太讓人省心。就在上個提測版本的質量還是沒法保證,總是或多或少出現一些問題。于是就想到了上家公司的一個做法。就是在提測前...

    ctriptech 評論0 收藏0
  • 首次使用 linux 阿里云服務器,入門及使用

    摘要:首先關于遠程服務器的登錄入口,默認系統的用戶名是然后登錄密碼可以在控制臺進行修改。這里也可以通過自己配置服務器的鉤子函數,使其自動更新代碼,我還沒配置,就先不說了。上午編輯的文章 下午更新下 安裝環境 因為服務器默認 linux 系統,所以這里講怎么配置 linux 云服務環境。 我第一次使用的時候,還以為是要去安裝一個界面化桌面,以便我這個命令小白可以操作。但是,對于只有2G 的內存來說安...

    qiangdada 評論0 收藏0

發表評論

0條評論

leanxi

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<