0

我想使用 grunt 进行部署,因此想根据现有~/.ssh/config文件读取远程主机的配置。

要加载该配置,我正在使用sshconf但需要grunt.initConfig()在回调中包含调用以在定义环境时获得配置。

var sshconf = require('sshconf');

module.exports = function(grunt) {

  // Read in ssh configuration
  sshconf.read(function(err, sshHosts) {

    if (err)
      console.log(err);

    // SSH config loaded, now init grunt

    grunt.initConfig({
      sshconfig: {
        staging: {
          privateKey: grunt.file.read(sshHosts['project_staging'].properties.IdentityFile),
          host: sshHosts['project_staging'].properties.HostName,
          username: sshHosts['project_staging'].properties.User,
          port: sshHosts['project_staging'].properties.Port || 22,
          path: "/var/www/project"
        },
        production: {
          // ...
        }
      },
      // Tasks to be executed on remote server
      sshexec: {
        example_task: {
          command: 'uptime && hostname'
        }
      },
      sftp: {
        deploy: {
          files: {
            "./": ["*.json", "*.js", "config/**", "controllers/**", "lib/**", "models/**", "public/**", "views/**"]
          },
          options: {
            //srcBasePath: "test/",
            createDirectories: true
          }
        }
      }
      // More tasks
      // ...
    });
    grunt.loadNpmTasks('grunt-ssh');
    // More plugins ...
  });

};

当我称它为grunt --help

> grunt --help
Grunt: The JavaScript Task Runner (v0.4.1)
…
Available tasks
(no tasks found)

如果我没有在该回调 ( ) 中包含 grunt 启动,sshconf.read(function(err, sshHosts) {})则一切正常(除了未加载或尚未准备好使用的 ssh 配置)。

我正在尝试的甚至可能吗?如果可以,怎么做?我错过了一些明显的东西吗?

4

1 回答 1

2

Grunt init 不能像这样以异步方式使用。同步读取 sshconf 或使用任务,如本答案所述:如何在 grunt.initConfig() 之前执行异步操作?

于 2013-11-07T12:30:59.473 回答