部署AWS Beanstalk后执行命令

时间:2015-02-18 15:07:28

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

我在部署后遇到执行命令的问题,我有一些node.js项目和脚本,这个脚本使用来自node_modules的一些bin,如果我在.ebextensions / .config中编写脚本命令,他会在npm install和return之前执行错误("node_modules/.bin/some": No such file or directory)。如何在部署后执行命令。感谢。

3 个答案:

答案 0 :(得分:10)

我找到了以下解决方案

我添加到beanstalk config next命令:

commands:
  create_post_dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
    ignoreErrors: true
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/some_job.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      cd /var/app/current
      export PATH=$PATH:$(ls -td /opt/elasticbeanstalk/node-install/node-* | head -1)/bin
      npm run some_script

此命令为post-hooks脚本创建(如果不存在)文件夹并添加bash脚本。此文件夹中的脚本仅在安装npm后执行,这对我的问题非常重要。

感谢这位家伙http://junkheap.net/blog/2013/05/20/elastic-beanstalk-post-deployment-scripts/

答案 1 :(得分:2)

创建一个名为.ebextensions/post_actions.config的文件:

container_commands:
 <name of container_command>:
    command: "<command to run>"

这将在提取代码后执行,但在启动之前执行。

答案 2 :(得分:-2)

如果您阅读AWS ebextensions documentation,他们会提到执行,特别是他们提到所有命令都在部署应用程序版本之前执行。

  

“您可以使用container_commands键为您的命令执行命令   容器。在container_commands中的命令被处理   按名称字母顺序。它们在应用程序和Web之后运行   服务器已设置且应用程序版本文件已设置   提取,但在部署应用程序版本之前。“

如果你再次部署它应该可以工作;这是因为您的应用程序已经解压缩。然而,这不是一个有效的解决方案,因为每个生成的新实例都会出错。