在 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 角色?