Linux AWS CodeDeploy钩子脚本执行位置

Linux AWS CodeDeploy钩子脚本执行位置,linux,amazon-web-services,continuous-integration,aws-code-deploy,Linux,Amazon Web Services,Continuous Integration,Aws Code Deploy,我目前正在为我的一个NodeJS应用程序使用CodeDeploy,我有一个紧迫的问题,有没有办法指示我的BeforeInstall脚本在修订根目录而不是Linux操作系统的根目录上运行 例如,我的BeforeInstall钩子脚本可能如下所示: #!/bin/bash echo "Current directory: " echo $PWD echo `ls` # Do actual stuff here 通过查看日志,我觉得脚本是在/(OS根)上运行的,我如何指示它在修订根上运行?我知道我可

我目前正在为我的一个NodeJS应用程序使用CodeDeploy,我有一个紧迫的问题,有没有办法指示我的BeforeInstall脚本在修订根目录而不是Linux操作系统的根目录上运行

例如,我的BeforeInstall钩子脚本可能如下所示:

#!/bin/bash
echo "Current directory: "
echo $PWD
echo `ls`
# Do actual stuff here

通过查看日志,我觉得脚本是在/(OS根)上运行的,我如何指示它在修订根上运行?我知道我可以将CD放入
/opt/codedeploy agent/deployment root/app id/deployment id
,但每次检索app id和deployment id对我来说都是一件麻烦事。

您的脚本需要独立于位置。始终为脚本中的所有命令提供绝对路径以避免此类问题。

使用
cd“$(dirname“${BASH_SOURCE[0]}”)”
将目录更改为此部署的脚本目录


示例:
cd/opt/codedeployagent/deployment root/940bf299-698b-4179-a49f-f21316c1776/d-K24U7DAD1/deployment archive/scripts

如果您想在修订根目录下运行钩子脚本,可能是因为它需要访问那里的一些文件(至少这就是我想要cd的原因)

解决方案是将所需文件映射到
appspec.yml
中的绝对路径

假设您的应用程序需要一个配置文件(
config.yml
位于修订根目录)才能运行

您的
appspec.yml
可能看起来像:

files:
  - source: config.yml
    destination: /usr/local/etc/my_app
hooks:
  ApplicationStart:
    - location: scripts/start_app.sh
      timeout: 120
      runas: root
使用此
appspec.yml
,无需更改脚本执行位置或重建修订路径


您的脚本(
scripts/start\u app.sh
)可以直接访问映射位置的配置文件
/usr/local/etc/my\u app/config.yml

您需要将cd刻录到所需的文件夹找到解决方案了吗?这不是Amazon要求我们的do@VictorFerreira关键是将修订文件映射到绝对路径,看看我的答案。