【问题标题】:Execute command after deploy AWS Beanstalk部署 AWS Beanstalk 后执行命令
【发布时间】:2015-04-19 15:27:57
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我找到了以下解决方案

    我添加到 beanstalk 配置下一个命令:

    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/

    【讨论】:

    • 非常感谢。我对 PHP 脚本有同样的问题。它就像一个魅力。
    • 如果部署失败,这个脚本会运行吗? @斯特拉贝克
    • @daxiang28:使用 PATH=$PATH:ls -td /opt/elasticbeanstalk/node-install/node-* | head -1/bin 将 node 和 npm 可执行文件添加到您的路径。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,但我需要在它启动后(部署后)。
    • 应用解压后,先放到暂存区,再复制到指定的应用文件夹中。对于 PHP,它首先在 /var/app/ondeck 上演。 1) /var/app/current 移动到 /var/app/current.old 2) 然后 /var/app/ondeck 移动到 /var/app/current 如果您需要在 app 文件夹上执行任何命令,您可以在 post_actions.config 中执行此操作,但针对 @987654329 进行更改@。对于每个平台的文件夹被复制位置的特定上下文,您可以查看位于 /var/log/eb-activity.log 的日志
    【解决方案3】:

    更好的方法是使用 aws 平台挂钩。你可以在哪里定义 postdeploy 钩子AWS Patform Hooks

    在项目根目录里面你可以添加 .platform/hooks/postdeploy/

    Insdie这个路径可以创建xxx-postdeploy-script.sh。此处的文件在 Elastic Beanstalk 平台引擎部署应用程序和代理服务器后运行。这是部署工作流的最后一步

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 不幸的是,没有。因为 EB 创建了试图安装应用程序的临时文件夹,如果 delpoy 完成 EB 将其移动到 /var/app.... .
      猜你喜欢
      • 2018-04-16
      • 2018-07-23
      • 2021-12-18
      • 2019-07-15
      • 2017-05-30
      • 2020-10-18
      • 1970-01-01
      • 2015-07-28
      • 2019-03-18
      相关资源
      最近更新 更多