在 ElasticBeanstalk 上运行 Grunt

Posted

技术标签:

【中文标题】在 ElasticBeanstalk 上运行 Grunt【英文标题】:Run Grunt on ElasticBeanstalk 【发布时间】:2015-09-25 05:36:00 【问题描述】:

我有一个节点应用程序需要 grunt 执行“构建”才能成功执行应用程序。 (运行源代码的 concat/minification/revving 等)。我已经在具有 SSH 访问权限的 EC2 实例上运行它,因为我可以通过 SSH 进入目录并在部署过程中运行 Grunt。然而,为了自动化这一点,我现在将应用程序移动到 ElasticBeanstalk 并且我很难让应用程序成功运行 grunt。迁移到 EB 的原因是让 SSH 密钥关闭实时服务器,因此这些 EB 实例设置为没有 ssh 访问权限。

似乎没有可用的官方文档,任何人都可以为我指出一个能够实现上述目标的好方向吗?我需要在应用程序启动之前执行 grunt,以便应用程序有可用的文件(否则会出现 404)。

【问题讨论】:

与我的建议相比,这是一个有点相关的问题,它提供了另一种方法:***.com/questions/23444288/… 【参考方案1】:

运行 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
    获取 sudo 访问权限 用 yum 安装 node.js 和 npm 安装 bower(我的 gulp 进程需要 bower) 安装 gulp 安装 git(bower 需要) 然后我运行两个容器命令,它们发生在 npm install 之后和 npm start 之前:
      凉亭安装 一饮而尽

在您的情况下,您只需删除 bower 和 git 安装,安装 grunt-cli,然后运行 ​​grunt。


自从这样做以来,我通过在部署并将构建的文件提交到 git 存储库之前预先完成所有操作,消除了对上述过程的需求。这至少是一次很好的学习体验,让我可以更好地控制由 beanstalk 部署的 ec2 实例。

【讨论】:

谢谢!我错过了 sudo 部分并将 dist 文件提交到 repo 是我想要避免的。 嗨,凯文,我很好奇你的最后一段。为什么你觉得将构建文件提交到 git 比运行 gulp 更合适? 如果我提交构建文件,我不必担心很少会发生构建失败,并且会获得更快的启动时间。【参考方案2】:

这并不能完全回答问题,但根据 Kevin B 的最后一句话,我在 Elastic Beanstalk 之外执行繁重的任务,包括构建,并使用 .ebignore 来控制部署。当 .ebignore 存在时,eb deploy 会跟随它而不是 .gitignore。这使我可以在 Elastic Beanstalk 之外控制构建过程,同时将构建工件排除在我的 git 存储库之外。

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

.gitignore

node_modules
.elastic_beanstalk
...
.build

.ebignore

node_modules
.elastic_beanstalk
...
.git

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

【讨论】:

以上是关于在 ElasticBeanstalk 上运行 Grunt的主要内容,如果未能解决你的问题,请参考以下文章

使用 ElasticBeanstalk 在 AWS 上部署在 Python 3.6 上运行的 Django 项目

在 AWS ElasticBeanstalk 上部署 - 在启动服务器之前运行自定义 npm 脚本?

从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS

如何在 Elasticbeanstalk 环境中运行的 docker 容器中承担 AWS 角色?

在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis

在 elasticbeanstalk 上安装 npm canvas - npm 安装错误