我想使用 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 配置)。
我正在尝试的甚至可能吗?如果可以,怎么做?我错过了一些明显的东西吗?