Elastic Beanstalk运行部署后脚本

时间:2016-11-23 12:06:46

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

我的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弹性豆茎上做到吗?

4 个答案:

答案 0 :(得分:4)

我还没有使用Elastic Beanstalk完成nodejs,但我做了很多Django。

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

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 :(得分: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

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

答案 2 :(得分:0)

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

根据各个部分的偏好执行文件,container_commands是第一个,/var/app/current是最后一个。在此阶段,应用程序尚未复制到所需位置(container_commands)。

此外,如果您设置了环境变量,则只能在int product_col2Xcol3 = 0; int sum_totalcol2Xcol3 = 0; //Calculations of the SUM(Product) of col2 and col3 for (int row = 0; row < r; row++) { product_col2Xcol3 = matrix[row, col2] * matrix[row, col3]; sum_totalcol2Xcol3 = sum_totalcol2Xcol3 + product_col2Xcol3 ; } // why 2* ?????? think it shouldn't be there. Console.WriteLine("Total is :" + 2*sum_totalcol2Xcol3 ); 中使用这些变量。

答案 3 :(得分:0)

从 Amazon Linux 2 开始,您必须使用 Platform Hooks。此处的其他答案仅适用于 Amazon Linux AMI 平台版本。

例如在您的应用程序根目录中,创建

<块引用>

.platform/hooks/postdeploy

文件夹,然后创建一个名为 service-httpd-restart.sh 的文件

内容为

#!/usr/bin/env bash
service httpd restart

做和Gustaf's comment一样的事情。