在远程主机上执行命令的Node.js库:Flightplan

jopen 10年前

Flightplan 这是一个可以在本地或者远程主机上运行一序列命令的 Node.js 库。用于执行应用发布和系统管理任务,类似 Python 的 Fabric。

安装和使用

# install the cli tool  $ npm install -g flightplan    # use it in your project  $ npm install flightplan --save-dev    # run a flightplan (`fly --help` for more information)  $ fly <destination> [--plan flightplan.js]

简单的示例flightplan.js

// flightplan.js  var Flightplan = require('flightplan');    var tmpDir = 'pstadler-sh-' + new Date().getTime();    var plan = new Flightplan();    // configuration  plan.briefing({      debug: false,      destinations: {          'staging': {              host: 'staging.pstadler.sh',              username: 'pstadler',              agent: process.env.SSH_AUTH_SOCK          },          'production': [              {                  host: 'www1.pstadler.sh',                  username: 'pstadler',                  agent: process.env.SSH_AUTH_SOCK              },              {                  host: 'www2.pstadler.sh',                  username: 'pstadler',                  agent: process.env.SSH_AUTH_SOCK              }          ]      }  });    // run commands on localhost  plan.local(function(local) {      local.log('Run build');      local.exec('gulp build');        local.log('Copy files to remote host');      var filesToCopy = '(git ls-files -z;find assets/public -type f -print0)';      local.exec(filesToCopy + '|rsync --files-from - -avz0 --rsh="ssh"'                  + ' ./ pstadler@pstadler.sh:/tmp/' + tmpDir);  });    // run commands on remote hosts (destinations)  plan.remote(function(remote) {      remote.log('Move folder to web root');      remote.sudo('cp -R /tmp/' + tmpDir + ' ~', { user: 'www' });      remote.rm('-rf /tmp/' + tmpDir);        remote.log('Install dependencies');      remote.sudo('npm --production --silent --prefix ~/'                      + tmpDir + ' install ~/' + tmpDir, { user: 'www' });        remote.log('Reload application');      remote.sudo('ln -snf ~/' + tmpDir + ' ~/pstadler-sh', { user: 'www' });      remote.sudo('pm2 reload pstadler-sh', { user: 'www' });  });    // run more commands on localhost afterwards  plan.local(function(local) { /* ... */ });  // ...or on remote hosts  plan.remote(function(remote) { /* ... */ });    // executed if flightplan succeeded  plan.success(function() {  });    // executed if flightplan failed  plan.disaster(function() {  });    // always executed after flightplan finished  plan.debriefing(function() {  });

项目主页:http://www.open-open.com/lib/view/home/1392514760491