Elastic Beanstalk运行部署后脚本

问题描述 投票:4回答:3

我的node.js应用程序包含两个东西,一个快速后端和一个反应前端。

我在这个结构中有两个package.json文件

package.json 
/app/package.json

我想要做的是在我的前端文件夹app中运行一个脚本来构建我的代码。

我要运行的脚本是npm installnpm run build如何在部署发生后运行此脚本?

commands:
    01_app_npm_install:
        command: npm install
        cwd: app/
    02_app_npm_build:
        command: npm run build
        cwd: app/

但它返回一个错误,说“没有这样的文件或目录:'app /'。”

这有可能在aws弹性豆茎上做吗?

node.js amazon-web-services npm elastic-beanstalk
3个回答
4
投票

我自己没有用Elastic Beanstalk做过nodejs,但是我做了很多Django。

commands: section在项目文件到位之前运行。 您可以在此处安装服务器软件包。

container_commands:部分在文件放入其最终目的地之前在暂存目录中运行(对于nodejs来说似乎是/ var / app / current)。 如果需要,您可以在此处修改文件。

上面的参考: http//docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

您还可以运行后部署脚本。 这没有很好的记录(至少它没有)。 你可以这样做:

files:
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/usr/bin/env bash
            service httpd restart

1
投票

感谢@gustaf和其他一些网站,我设法将解决方案整合在一起。 它不漂亮,但它的工作原理。

我在.ebextensions/01_build.config创建了一个文件

commands:
  create_post_dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
    ignoreErrors: true
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      cd /var/app/current/app/
      sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm install
      sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm run build

硬编码节点版本并不完美,但现在可以使用。


0
投票

如果您参考文档,您会发现container_commands是应该放置应用相关内容的地方。

该文件基于各个部分的首选项执行, commands是第一个, container_commands是最后一个。 在此阶段,应用程序尚未复制到所需位置( /var/app/current )。

此外,如果设置环境变量,则只能在container_commands使用这些变量。

© www.soinside.com 2019 - 2024. All rights reserved.