在 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 命令?