我目前正在使用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对我来说似乎很麻烦。
答案 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
处的配置文件。