文章目錄
- 一、先說思路
- 二、示例代碼
一、先說思路
1、使用cross-env修改系統常量,使程式知道接下來的操作要想那個伺服器自動部署
2、使用ssh2操作伺服器,将伺服器上原有的項目改名,并放入記錄檔案夾
3、使用scp2将打包後的檔案發送到對應的伺服器的指定位置
二、示例代碼
var scpClient = require("scp2");
var Client = require("ssh2").Client; //連接配接遠端伺服器
var dayjs = require("dayjs");
const load = process.env.TARGET;
let nowTime = dayjs().format("YYYY.MM.DD.HH.mm.ss");
let temp = {
dev: {
host: "152.136.XX.XX", //伺服器IP位址
port: 22, //SSH端口号
username: "ssh使用者名", //伺服器SSH登入使用者名
password: "ssh密碼",
shell:
`cd /www/server/project\n` +
`mv test test-${nowTime}-replace\n` +
`mv test-${nowTime}-replace record/`,
filePath: "test",
path: "/www/server/project/test",
},
};
var conn = new Client();
conn
.on("ready", function () {
console.log("ssh ready");
conn.exec(temp[load].shell, function (err, stream) {
if (err) throw err;
stream
.on("close", function (code, signal) {
// 在執行shell指令後,把開始上傳部署項目代碼放到這裡面
console.log("正在部署至" + temp[load].host);
scpClient.scp(temp[load].filePath, temp[load], (err) => {
if (err) {
console.log("部署失敗", err);
throw err;
} else {
console.log("部署成功");
}
});
conn.end();
})
.on("data", (data) => {
console.log("STDOUT: " + data);
})
.stderr.on("data", (data) => {
console.log("STDERR: " + data);
});
});
})
.on("error", function (err) {
console.log("error" + err);
})
.connect({
host: temp[load].host,
port: temp[load].port,
username: temp[load].username,
password: temp[load].password,
});