我正在尝试从 GitHub 进行部署,我想按照数组的顺序执行多个命令。我现在使用的代码包含在下面。
async.series([
...
// Deploy from GitHub
function (callback) {
// Console shizzle:
console.log('');
console.log('Deploying...'.red.bold);
console.log();
console.log();
var deployFunctions = [
{
command: 'cd ' + envOptions.folder + ' && pwd',
log: false
},
{
command: 'pwd'
},
{
command: 'su ' + envOptions.user,
log: false
},
{
command: 'git pull'
},
{
command: 'chmod 0777 * -R',
log: false
}
];
async.eachSeries(deployFunctions, function (item, callback) {
deployment.ssh2.exec(item.command, function (err, stream) {
deployment.logExec(item);
stream.on('data', function (data, extended) {
console.log(data.toString().trim());
console.log();
});
function done() {
callback(err);
}
stream.on('exit', done);
stream.on('end', done);
});
}, function () {
callback();
});
},
...);
但是,在我 cd 到正确的目录后,它忘记了它在哪里并重新开始。
$ cd /some/folder && pwd
/some/folder
$ pwd
/root
最佳答案
@robertklep 关于为什么您的 cd
不持久的说法是正确的。每个命令调用一个不同的 shell 实例,该实例以其初始状态开始。您可以在每个命令前加上 cd/home/jansenstok/domains/alcoholtesterwinkel.com/public_html/&&
作为快速修复,但实际上您正在为自己设置痛苦。您想要的是一个 shell 脚本,它具有多行的所有功能,而不是一个单独的断开连接的命令列表。
看第1步使用ssh2的sftp
函数将一个完整的shell脚本传输到远程机器,通过exec
执行(/bin/bash/tmp/your_deploy_script.sh
) 作为第 2 步,然后删除脚本作为第 3 步。
关于javascript - 如何使用 NodeJS 在 SSH2 上执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907125/