AWS CodeDeploy挂钩脚本执行位置

时间:2018-02-01 04:18:50

标签: linux amazon-web-services continuous-integration aws-code-deploy

我目前正在使用CodeDeploy作为我的NodeJS应用程序,我只有一个问题,有没有办法说明,我的BeforeInstall脚本在修订版根目录而不是我的Linux操作系统的根目录上运行? / p>

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

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

通过查看日志,在我看来脚本是在/(OS root)上运行的,我该如何指示它在修订根目录上运行?我知道我可以将CD刻录到/opt/codedeploy-agent/deployment-root/app-id/deployment-id但是每次检索应用ID和部署ID对我来说似乎很麻烦。

3 个答案:

答案 0 :(得分:1)

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

示例:cd /opt/codedeploy-agent/deployment-root/940bf299-698b-4179-a49f-f221316c1776/d-K24U7DAD1/deployment-archive/scripts

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你想在修订根目录运行你的钩子脚本,可能是因为它需要访问那里的一些文件(至少这就是我想要 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_app.sh) 可以直接访问映射位置 /usr/local/etc/my_app/config.yml 处的配置文件。