有没有一种好方法可以执行gcloud
命令将应用程序部署到GAE并看到stderr / stdout在控制台上回显?我已经尝试了gulp-exec
,但它似乎批量输出,只在完成后才转储。当尝试在本地预览时,它也不会很好地发挥。
答案 0 :(得分:2)
最后我不想再使用另一个npm,但是受gulp-run
的一部分的启发,我想出了以下假设“干净”的内容。并且'建立'任务存在,并且还覆盖了gulp-replace
任务的每个环境的一些常量,这是我的构建的一部分,关键是子shell的产生并将其输出传递给当前进程&#39 S:
// gulp deploy [-a dev|staging|prod]
gulp.task('deploy', function() {
var commands = {
remote: 'gcloud preview app deploy app.yaml -q --set-default --project ',
local: 'gcloud preview app run app.yaml'
};
var environments = {
dev: {
app: 'myapp-dev',
},
staging: {
app: 'myapp-staging',
MY_ENDPOINT: 'https://staging.example.com'
},
prod: {
app: 'myapp',
MY_ENDPOINT: 'https://example.com'
}
};
var command = commands.local;
var env = environments[argv.a];
if (env) {
command = commands.remote + env.app;
constantsMap.MY_ENDPOINT = env.MY_ENDPOINT;
}
// Now that our constants are configured, kick off the build, then deploy.
runSequence('clean', 'build', function() {
var title = util.format('$ %s\n', $.util.colors.blue(command));
process.stdout.write(title);
// run the command in its own subshell and pipe the output to our own.
var subshell = childProcess.spawn('sh', ['-c', command]);
subshell.stdout.pipe(process.stdout);
subshell.stderr.pipe(process.stderr);
});
});
这依赖于npms:run-sequence,util,yargs,gulp-load-plugins
答案 1 :(得分:1)
如果您想在代码片段之后执行命令,将会对您有所帮助。当你使用gulp时,我把它包装在一个承诺中:
var cp = require('child_process');
function executeCommand(command, option) {
return new Promise(function (resolve, reject) {
var args = [option.something, option.something];
var ls = cp.spawn(command, args);
var output = "";
ls.on('error', function (err) {
reject(err);
});
ls.stdout.on('data', function (data) {
output += String(data);
console.log(output)
});
ls.on('exit', function (code) {
if (code === 0) {
resolve({
"output": output
});
} else {
reject(Error(output));
}
});
});
}
答案 2 :(得分:0)
我正在使用gulp-gae,似乎效果很好。
支持的命令是appcfg.py
和dev_appserver.py
(在当前版本中)。它还可以配置为覆盖给定app.yaml
的某些值。