简单的gulp任务部署到谷歌应用程序引擎和流输出到控制台?

时间:2015-09-17 06:28:16

标签: google-app-engine gulp

有没有一种好方法可以执行gcloud命令将应用程序部署到GAE并看到stderr / stdout在控制台上回显?我已经尝试了gulp-exec,但它似乎批量输出,只在完成后才转储。当尝试在本地预览时,它也不会很好地发挥。

3 个答案:

答案 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.pydev_appserver.py(在当前版本中)。它还可以配置为覆盖给定app.yaml的某些值。