|
|
@@ -134,7 +134,7 @@ const checkSessionId = () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-const getAccess = (dev) => {
|
|
|
+const getAccess = (server) => {
|
|
|
return instance
|
|
|
.post(
|
|
|
config.accessUrl,
|
|
|
@@ -143,13 +143,13 @@ const getAccess = (dev) => {
|
|
|
resolution: "1159x897:maximize",
|
|
|
isDualAuth: false,
|
|
|
anyAccount: "admin",
|
|
|
- anyPassword: "yWfuA@4NTX!b#2kG",
|
|
|
+ anyPassword: server.password,
|
|
|
recheckCode: "",
|
|
|
},
|
|
|
sessRemark: "",
|
|
|
account: "any",
|
|
|
proto: "sftp",
|
|
|
- dev: dev,
|
|
|
+ dev: server.id,
|
|
|
},
|
|
|
{
|
|
|
headers: {
|
|
|
@@ -169,50 +169,55 @@ const getAccess = (dev) => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
-// const ls = spawn("sh", ["build.sh"], { cwd: config.projectDir });
|
|
|
+const build = () => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const ls = spawn("sh", ["build.sh"], { cwd: config.projectDir });
|
|
|
|
|
|
-// ls.stdout.on("data", (data) => {
|
|
|
-// process.stdout.write(data);
|
|
|
-// });
|
|
|
-
|
|
|
-// ls.stderr.on("data", (data) => {
|
|
|
-// process.stderr.write(data);
|
|
|
-// });
|
|
|
+ ls.stdout.on("data", (data) => {
|
|
|
+ process.stdout.write(data);
|
|
|
+ });
|
|
|
|
|
|
-// ls.on("error", (error) => {
|
|
|
-// console.log(`error: ${error.message}`);
|
|
|
-// });
|
|
|
+ ls.stderr.on("data", (data) => {
|
|
|
+ process.stderr.write(data);
|
|
|
+ });
|
|
|
|
|
|
-// ls.on("close", (code) => {
|
|
|
-// console.log(`build finished with code ${code}`);
|
|
|
+ ls.on("error", (error) => {
|
|
|
+ console.log(`error: ${error.message}`);
|
|
|
+ });
|
|
|
|
|
|
-// });
|
|
|
-let multi = new Multiprogress(process.stdout);
|
|
|
-new Promise((resolve, reject) => {
|
|
|
- checkSessionId()
|
|
|
- .then(() => {
|
|
|
+ ls.on("close", (code) => {
|
|
|
+ console.log(`build finished with code ${code}`);
|
|
|
resolve();
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- sessionId = null;
|
|
|
- getSessionId().then(() => {
|
|
|
- resolve();
|
|
|
- });
|
|
|
});
|
|
|
-}).then(() => {
|
|
|
- upload(servers[0].id);
|
|
|
- // upload(servers[5].id);
|
|
|
- // upload(servers[6].id);
|
|
|
-});
|
|
|
-
|
|
|
-const upload = (dev) => {
|
|
|
- return getAccess(dev).then((res) => {
|
|
|
- console.log(res);
|
|
|
+ });
|
|
|
+};
|
|
|
+let multi = new Multiprogress(process.stdout);
|
|
|
+// build()
|
|
|
+Promise.resolve()
|
|
|
+ .then(() => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ checkSessionId()
|
|
|
+ .then(() => {
|
|
|
+ resolve();
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ sessionId = null;
|
|
|
+ getSessionId().then(() => {
|
|
|
+ resolve();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ upload(servers[0]);
|
|
|
+ // upload(servers[5].id);
|
|
|
+ // upload(servers[6].id);
|
|
|
+ });
|
|
|
|
|
|
- const buffer = Buffer.from(
|
|
|
- res.url.match(/accessclient:\/\/(.*)/)[1],
|
|
|
- "base64"
|
|
|
- );
|
|
|
+const upload = async (server) => {
|
|
|
+ let { url } = await getAccess(server);
|
|
|
+ const buffer = Buffer.from(url.match(/accessclient:\/\/(.*)/)[1], "base64");
|
|
|
+ let accessJson = await new Promise((resolve, reject) => {
|
|
|
unzip(buffer, (err, buffer) => {
|
|
|
if (err) {
|
|
|
console.error("An error occurred:", err);
|
|
|
@@ -220,66 +225,95 @@ const upload = (dev) => {
|
|
|
}
|
|
|
let accessJson = JSON.parse(buffer.toString());
|
|
|
console.log(accessJson);
|
|
|
+ resolve(accessJson);
|
|
|
+ });
|
|
|
+ });
|
|
|
|
|
|
- const ssh = new NodeSSH();
|
|
|
+ // let file = "/Users/drew/Desktop/building3.tar.gz";
|
|
|
+ let file = path.resolve(config.projectDir, "build.tar.gz");
|
|
|
+ let stat = fs.statSync(file);
|
|
|
+ let bar = multi.newBar(" uploading [:bar] :rate/bps :percent :etas", {
|
|
|
+ complete: "=",
|
|
|
+ incomplete: " ",
|
|
|
+ width: 20,
|
|
|
+ total: stat.size,
|
|
|
+ });
|
|
|
+ return
|
|
|
|
|
|
- ssh.connect({
|
|
|
- host: accessJson.Host,
|
|
|
- username: accessJson.User,
|
|
|
- password: accessJson.PWD,
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- ssh.connection.on("error", (err) => {
|
|
|
- console.log("sftp err", err);
|
|
|
- });
|
|
|
- ssh.connection.sftp((err, sftp) => {
|
|
|
- if (err) throw err;
|
|
|
- // var stat = fs.statSync(
|
|
|
- // path.resolve(config.projectDir, "build.tar.gz")
|
|
|
- // );
|
|
|
- var stat = fs.statSync(
|
|
|
- "/Users/drew/Desktop/DBQNL.jpeg"
|
|
|
- );
|
|
|
- let size = stat.size;
|
|
|
- let uploadedSize = 0;
|
|
|
- var bar = multi.newBar(
|
|
|
- " uploading [:bar] :rate/bps :percent :etas",
|
|
|
- {
|
|
|
- complete: "=",
|
|
|
- incomplete: " ",
|
|
|
- width: 20,
|
|
|
- total: size,
|
|
|
- }
|
|
|
- );
|
|
|
- // let readStream = fs.createReadStream(
|
|
|
- // path.resolve(config.projectDir, "build.tar.gz")
|
|
|
- // );
|
|
|
- let readStream = fs.createReadStream(
|
|
|
- "/Users/drew/Desktop/DBQNL.jpeg"
|
|
|
- );
|
|
|
- let writeStream = sftp.createWriteStream(
|
|
|
- "/home/admin/123.tar.gz"
|
|
|
- );
|
|
|
- readStream.on("data", function (buffer) {
|
|
|
- uploadedSize += buffer.length;
|
|
|
- bar.tick(buffer.length);
|
|
|
- if (uploadedSize === size) {
|
|
|
- console.log("finish");
|
|
|
- setTimeout(() => {
|
|
|
- sftp.end();
|
|
|
- }, 400);
|
|
|
- }
|
|
|
- });
|
|
|
+ const ssh = new NodeSSH();
|
|
|
+ await ssh.connect({
|
|
|
+ host: accessJson.Host,
|
|
|
+ username: accessJson.User,
|
|
|
+ password: accessJson.PWD,
|
|
|
+ });
|
|
|
+ // await ssh.putFile(file, "/home/admin/build.tar.gz", null, {
|
|
|
+ // concurrency: 1,
|
|
|
+ // chunkSize: 3276800,
|
|
|
+ // step: (total_transferred, chunk, total) => {
|
|
|
+ // bar.tick(chunk);
|
|
|
+ // },
|
|
|
+ // });
|
|
|
|
|
|
- // Some other events you might want for your code
|
|
|
- readStream.on("end", function () {});
|
|
|
- readStream.on("close", function () {});
|
|
|
- readStream.pipe(writeStream);
|
|
|
- });
|
|
|
- })
|
|
|
- .catch((e) => {
|
|
|
- console.log("err", e);
|
|
|
- });
|
|
|
+ ssh.connection.sftp((err, sftp) => {
|
|
|
+ if (err) throw err;
|
|
|
+ let rs = fs.createReadStream(file);
|
|
|
+ let ws = sftp.createWriteStream("/home/admin/build.tar.gz");
|
|
|
+ rs.on("data", (buffer) => {
|
|
|
+ bar.tick(buffer.length);
|
|
|
});
|
|
|
+ rs.on("close", () => {
|
|
|
+ console.log("stream close");
|
|
|
+ });
|
|
|
+ rs.on("end", () => {
|
|
|
+ console.log("stream end");
|
|
|
+ });
|
|
|
+ rs.pipe(ws);
|
|
|
});
|
|
|
+
|
|
|
+ // let sftp = new SftpClient();
|
|
|
+ // await sftp.connect({
|
|
|
+ // host: accessJson.Host,
|
|
|
+ // username: accessJson.User,
|
|
|
+ // password: accessJson.PWD,
|
|
|
+ // });
|
|
|
+ // await sftp.fastPut(file, "/home/admin/build.tar.gz", {
|
|
|
+ // concurrency: 64, // integer. Number of concurrent reads
|
|
|
+ // chunkSize: 32768, // integer. Size of each read in bytes
|
|
|
+ // // mode: 0o755, // mixed. Integer or string representing the file mode to set
|
|
|
+ // step: (total_transferred, chunk, total) => {
|
|
|
+ // bar.tick(chunk);
|
|
|
+ // },
|
|
|
+ // });
|
|
|
+ // console.log("finish");
|
|
|
+ // sftp.end();
|
|
|
+
|
|
|
+ // ssh = new NodeSSH();
|
|
|
+ // await ssh.connect({
|
|
|
+ // host: config.ip,
|
|
|
+ // username: `${config.username}/${server.ip}/any`,
|
|
|
+ // password: config.password,
|
|
|
+ // });
|
|
|
+ // let shell = await ssh.requestShell();
|
|
|
+ // shell.on("close", () => {
|
|
|
+ // console.log("Stream :: close");
|
|
|
+ // });
|
|
|
+ // shell.on("data", (data) => {
|
|
|
+ // let str = data.toString();
|
|
|
+ // process.stdout.write(data);
|
|
|
+ // if (/^login\:/.test(str)) {
|
|
|
+ // shell.write("admin\n");
|
|
|
+ // }
|
|
|
+ // if (/^admin@.*password:/.test(str)) {
|
|
|
+ // shell.write(`${server.password}\n`);
|
|
|
+ // setTimeout(() => {
|
|
|
+ // shell.write("su root\n");
|
|
|
+ // setTimeout(() => {
|
|
|
+ // shell.write(`${server.password}\n`);
|
|
|
+ // setTimeout(() => {
|
|
|
+ // shell.write("./deploy.sh\n");
|
|
|
+ // }, 100);
|
|
|
+ // }, 100);
|
|
|
+ // }, 100);
|
|
|
+ // }
|
|
|
+ // });
|
|
|
};
|