在 OpsWorks 中使用 Grunt 或 Gulp

Posted

技术标签:

【中文标题】在 OpsWorks 中使用 Grunt 或 Gulp【英文标题】:Using Grunt or Gulp with OpsWorks 【发布时间】:2014-11-27 17:06:18 【问题描述】:

我想在 Amazon OpsWorks 上部署应用程序时触发 Grunt 或 Gulp。 默认情况下,OpsWorks 的 Node.js 层运行 npm install,但不运行 gulp,我不知道如何编写自定义配方:还有其他解决方案吗?

【问题讨论】:

【参考方案1】:

不,你必须写一个食谱。

甚至 OpsWorks 的 Node.js 层也通过配方安装 npm:

opsworks-cookbooks / deploy / recipes / nodejs.rb(https://github.com/aws/opsworks-cookbooks/blob/master-chef-11.10/deploy/recipes/nodejs.rb#L20 for Chef 11.10)内容如下:

opsworks_nodejs do
    deploy_data deploy
    app application
end

定义在:

opsworks-cookbooks / deploy / definitions / opsworks_nodejs.rb(https://github.com/aws/opsworks-cookbooks/blob/master-chef-11.10/deploy/definitions/opsworks_nodejs.rb#L9 用于 Chef 11.10)并执行以下操作:

node[:dependencies][:npms].each do |npm, version|
    execute "/usr/local/bin/npm install #npm" do
        cwd "#deploy[:deploy_to]/current"
    end
end

【讨论】:

【参考方案2】:

另一种方法是从 OpsWorks 期望的文件中生成 Gulp,即server.js

var child_process = require( "child_process" );
child_process.spawn( "./node_modules/gulp/bin/gulp.js", 
  [ "main" ].concat( process.argv.slice( 2 ) ), 
    stdio: "inherit"
  
);

然后从 Gulp 中触发真正的主文件(例如 index.js)。

【讨论】:

以上是关于在 OpsWorks 中使用 Grunt 或 Gulp的主要内容,如果未能解决你的问题,请参考以下文章

如何使用厨师将 opsworks 变量提取到 .env 文件中?

如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?

如何使用 Cloudformation 向 OpsWorks 堆栈注册 RDS 实例?

AWS opsworks docker 服务发现

在 aws opsworks 中运行自定义食谱

如何接收 OpsWorks 部署通知?