Elastic BeanStalk 应用程序部署后挂钩未执行我的命令

Ome*_*uno 6 continuous-integration amazon-web-services continuous-deployment amazon-elastic-beanstalk devops

我最近能够在 Elastic Beanstalk 上使用代码管道部署我的 Laravel 应用程序,但遇到了问题。我注意到我的路由由于 php.conf Nginx 配置而失败。我必须向 EB 的 nginx php.conf 文件添加几行代码才能使其工作。

我现在的问题是,每次部署后,我修改 php.conf 文件的应用程序实例都被销毁并重新创建。我想要一种在每次成功部署后动态更新文件的方法。我有一个文件版本,我想用我的应用程序进行版本控制,因此想在部署后创建一个指向该文件的符号链接。

经过大量研究,我偶然发现了 Elastic Beanstalk 上的 appDeploy Hooks,它在部署后运行发布脚本,所以这样做了

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/91_post_deploy_script.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      sudo mkdir /var/testing1
      sudo ln -sfn /var/www/html/php.conf.example /etc/nginx/conf.d/elasticbeanstalk/php.conf
      sudo mkdir /var/testing
      sudo nginx -s reload
Run Code Online (Sandbox Code Playgroud)

这由于某种原因不起作用。符号链接未创建,因此我的路线仍然无法正常工作..

我什至添加了一些 mkdir 以确保该脚本中的命令运行,这些命令都没有运行,因为没有创建这些目录。

请注意,如果我通过 ssh 进入 ec2 实例并在那里运行命令,它会起作用。该 bash 脚本也存在于 post 目录中,如果我在服务器上手动运行它,它也能工作。

任何有关我如何解决此问题的指示都会有所帮助。也许我也做错了什么。

现在我已经按照这个来运行我的脚本。但是,脚本没有运行。我收到一个错误

2020/06/28 08:22:13.653339 [INFO] Following platform hooks will be executed in order: [01_myconf.config]
2020/06/28 08:22:13.653344 [INFO] Running platform hook: .platform/hooks/postdeploy/01_myconf.config
2020/06/28 08:22:13.653516 [ERROR] An error occurred during execution of command [app-deploy] - [RunPostDeployHooks]. Stop running the command. Error: Command .platform/hooks/postdeploy/01_myconf.config failed with error fork/exec .platform/hooks/postdeploy/01_myconf.config: permission denied 
Run Code Online (Sandbox Code Playgroud)

我尝试在此处关注此论坛帖子,通过向我的容器命令添加一个新命令来使我的文件可执行,如下所示:

01_chmod1:
        command: "chmod +x .platform/hooks/postdeploy/91_post_deploy_script.sh"
Run Code Online (Sandbox Code Playgroud)

我仍然遇到同样的问题。没有权限

Mar*_*cin 13

可悲的是,您所描述的钩子(即/opt/elasticbeanstalk/hooks/appdeploy)适用于Amazon Linux 1

由于您使用的是Amazon Linux 2,如评论中所述,您尝试使用的钩子不适用。因此他们没有被处决

在 Amazon Linux 2 中,有此处描述的新钩子,它们是:

prebuild – 此处的文件在 Elastic Beanstalk 平台引擎下载并提取应用程序源包之后,在设置和配置应用程序和 Web 服务器之前运行。

predeploy – 此处的文件在 Elastic Beanstalk 平台引擎设置和配置应用程序和 Web 服务器之后以及将它们部署到最终运行时位置之前运行。

postdeploy – 此处的文件在 Elastic Beanstalk 平台引擎部署应用程序和代理服务器之后运行。

这些新钩子的用途不同Amazon Linux 1 中的。因此,您必须返回到 Amazon Linux 1 或将您的应用程序迁移到 Amazon Linux 2。

此处描述从 Amazon Linux 1 到 EB 中的 Amazon Linux 2 的一般迁移步骤

  • @OmeneJosephOgheneruno 嗨。`01_myconf.config` 应重命名为 `01_myconf.sh`,它应该是可执行的 (chmod +x 01_myconf.sh),而且它也是普通的 bash 脚本。仅重复使用与 Amazon Linux 1 中使用的相同的“01_myconf.config”文件是不够的。必须针对 Amazon Llinux 2 重写该文件。我添加了有关如何从 Amazon Linux 1 迁移到 Amazon Linux 的答案的链接2. (2认同)