天天看點

使用spc2實作項目的多環境自動化部署一、先說思路二、示例代碼

文章目錄

  • 一、先說思路
  • 二、示例代碼

一、先說思路

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,
	});
           
使用spc2實作項目的多環境自動化部署一、先說思路二、示例代碼