我有一个节点应用程序需要grunt来做一个" build"在应用程序可以成功执行之前。 (运行concat / minification / reving源代码等)。我已经在具有SSH访问权限的EC2实例上运行,因为我可以通过SSH连接到目录并在部署过程中运行Grunt。但是为了实现自动化,我现在将应用程序移动到ElasticBeanstalk,并且我很难让应用程序成功运行grunt。迁移到EB的原因是为了保持SSH密钥关闭实时服务器,因此这些EB实例的设置没有ssh访问。
似乎没有可用的官方文档,是否有人能指出我能够实现上述目标的良好方向?我需要在应用程序启动之前执行grunt,以便应用程序可以使用这些文件(否则将会是404)。
答案 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
在你的情况下,你只需删除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 移到其他位置以加快速度。