如何在AWS Elastic Beanstalk平台钩子中添加chmod +x权限?

24

背景

我正在使用 Elastic Beanstalk 部署一个非常简单的测试应用程序。我有几个要使用 apt 安装的软件包。我在 .platform/hooks/prebuild 目录中包含了一个名为 01_installations.sh 的脚本文件来进行安装。当我将应用程序压缩并部署到 Elastic Beanstalk 时,日志确认 prebuild 脚本已运行,但是它没有权限。

2020/08/12 21:03:46.674234 [INFO] Executing instruction: RunAppDeployPreBuildHooks
2020/08/12 21:03:46.674256 [INFO] Executing platform hooks in .platform/hooks/prebuild/
2020/08/12 21:03:46.674296 [INFO] Following platform hooks will be executed in order: [01_installations.sh]
2020/08/12 21:03:46.674302 [INFO] Running platform hook: .platform/hooks/prebuild/01_installations.sh
2020/08/12 21:03:46.674482 [ERROR] An error occurred during execution of command [app-deploy] - [RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/01_installations.sh failed with error fork/exec .platform/hooks/prebuild/01_installations.sh: permission denied  

问题

我的理解是权限被拒绝是因为我没有添加 chmod +x 使 .sh 文件可执行。正如 AWS 平台钩子文档所述:“使用 chmod +x 在您的钩子文件上设置执行权限” (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html)。 我的问题是:我该如何做这个?

我只是在一个目录中有这个 .sh 文件。我没有从任何其他地方调用它。我是否缺少简单的步骤?AWS 文档让它看起来应该很简单。

之前尝试过的方法

我尝试过以下方法:

  1. 添加 .ebextensions
    • 尝试:在 .ebextensions 目录下创建一个 .config 文件,并使用下面的命令以 chmod +x 权限执行 .sh 文件。
    • 结果:出现相同的错误。Elastic Beanstalk 日志并未指示已处理 .config 文件。
container_commands:
    01_chmod1:
        command: "chmod +x .platform/hooks/prebuild/01_installations.sh"
  1. 更改.sh文件的名称
    • 尝试:根据AWS用户(链接如下)的建议,将.sh文件更名为“chmod + x 01_installations.sh”。删除.ebextensions
    • 结果:仍然出现相同的错误。
[RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/chmod +x 01_installations.sh failed with error fork/exec .platform/hooks/prebuild/chmod +x 01_installations.sh: permission denied 

我已经审核了这里的想法,但它们中没有一个包含足够完整的示例可供参考:

3个回答

18

1
在 Windows 10 上使用 Git Bash 对我来说不起作用。不确定它为其他人工作的原因。也许他们使用的是 WSL 而不是 Git Bash。 - kimbaudi
@kimbaudi 我没有在Windows上尝试过。 - Khaled AbuShqear
我不明白。你把这个chmod放在哪里?我有一个相同的场景,在.platform/hooks/postdeploy/中的post deploy脚本中出现了权限被拒绝的错误。 - tavor999
@tavor999 在本地的仓库文件夹中完成操作 -> 提交更改 -> 推送更改 - Khaled AbuShqear

14

通常在对部署包进行压缩之前,您需要在本地工作站上设置权限。

然而,如果您想要在EB实例上执行此操作,则无法使用container_commands。原因是container_commands会在prebuild之后执行。相反,您应该尝试使用commands

在配置文件中的commands部分中找到并运行命令后,预构建文件将运行,但在运行Buildfile命令之前运行。


1
感谢您的澄清。将container_commands更改为commands确实使其运行,但脚本再次失败了。 - whoopscheckmate
1
“commands”在应用程序解压缩之前执行,因此,如果您尝试访问其中一个预构建脚本,则无法正常工作。过去可能有效,因为它有14个赞,但是就目前撰写此评论而言,我可以确保这已不再起作用。 - Llorenç Pujol Ferriol

0

在更新权限并提交更改后,这对我起作用了。

此外,.config文件中的命令将无法工作,因为这些命令将在预部署时运行,因此无法找到.sh文件的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接