在ElasticBeanstalk上运行Grunt

时间:2015-07-07 15:52:04

标签: node.js amazon-web-services amazon-ec2 elastic-beanstalk

我有一个节点应用程序需要grunt来做一个" build"在应用程序可以成功执行之前。 (运行concat / minification / reving源代码等)。我已经在具有SSH访问权限的EC2实例上运行,因为我可以通过SSH连接到目录并在部署过程中运行Grunt。但是为了实现自动化,我现在将应用程序移动到ElasticBeanstalk,并且我很难让应用程序成功运行grunt。迁移到EB的原因是为了保持SSH密钥关闭实时服务器,因此这些EB实例的设置没有ssh访问。

似乎没有可用的官方文档,是否有人能指出我能够实现上述目标的良好方向?我需要在应用程序启动之前执行grunt,以便应用程序可以使用这些文件(否则将会是404)。

2 个答案:

答案 0 :(得分:12)

运行grunt与运行gulp非常相似,所以,我将在下面包含我的配置。

这是在项目根目录下的 .ebextensions 文件夹中,名为 01run.config 。您可以拥有多个配置文件,它们将按字母顺序运行(因此开头的 01 。)

这基本上只是指示进程按顺序运行这些命令,再次按字母顺序完成,所以我相应地命名它们。

commands:
  01get_sudo:
    command: echo Defaults:root \!requiretty >> /etc/sudoers
  02npm_install:
    command: sudo yum -y --enablerepo=epel install nodejs npm
  03npm_install_bower:
    command: sudo npm install -g bower
  04npm_install_gulp:
    command: sudo npm install -g gulp
  05yum_install_git:
    command: sudo yum -y --enablerepo=epel install git
container_commands:
  01bower_install:
    command: sudo bower install --allow-root
  02gulp_sass:
    command: sudo gulp sass
  1. 获取sudo访问权限
  2. 使用yum
  3. 安装node.js和npm
  4. 安装凉亭(我的gulp过程需要凉亭)
  5. 安装gulp
  6. 安装git(凉亭需要)
  7. 我然后运行两个容器命令,这些命令发生在npm install之后和npm start之前:
    1. bower install
    2. gulp sass
  8. 在你的情况下,你只需删除bower和git installs,安装grunt-cli,然后运行grunt。

    由于这样做,在部署并将构建的文件提交到git存储库之前,我已经完全不需要上述过程。这至少是一个很好的学习经验,让我可以更好地控制beanstalk部署的ec2实例。

答案 1 :(得分:1)

这并没有完全回答这个问题,但是根据Kevin B的最后一句话,我在Elastic Beanstalk之外做了一些繁琐的任务,包括构建,并使用 .ebignore 来控制部署。当 .ebignore 存在时,eb deploy会跟随 .gitignore 。这允许我控制Elastic Beanstalk之外的构建过程,同时保持构建工件不受我的git repo的影响。

例如,如果构建工件转到 .build /

<强>的.gitignore

node_modules
.elastic_beanstalk
...
.build

<强> .ebignore

node_modules
.elastic_beanstalk
...
.git

请务必在 .ebignore 中添加.git,以防止部署本地git repo元数据。此外,我发现eb deploy评估排除文件夹中的所有子文件夹,从而不必要地减慢部署速度。在运行eb deploy之前,我必须暂时将 node_modules 移到其他位置以加快速度。