【问题标题】:AWS CodeDeploy hooks scripts execution locationAWS CodeDeploy 挂钩脚本执行位置
【发布时间】:2018-07-11 08:04:55
【问题描述】:

我目前正在为我的 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,但每次检索应用程序 ID 和部署 ID 对我来说似乎很麻烦。

【问题讨论】:

  • 您需要 cd 到所需的文件夹
  • 你找到解决办法了吗?

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


【解决方案1】:

如果你想在修订根目录运行你的钩子脚本,可能是因为它需要访问那里的一些文件(至少这就是我想要 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 的配置文件。

【讨论】:

  • 我的source files 的destination 是/var/opt/app/aws 并且我的update_wheel.sh 的位置需要相对于其location 在location 的路径:/var/opt/app/aws/update_wheel.sh 需要例如,参见/var/opt/app/aws/packages。但是当我运行这个 appspec 时,我得到了 /opt/codedeploy-agent/deployment-root/02b_truncatedhere_449/d-WEOED8WCC/deployment-archive/var/opt/app/aws/update_wheel.sh;我想在destination 文件中运行update_wheel.sh 而不是deployment-root/deployment-archive
【解决方案2】:

使用cd "$(dirname "${BASH_SOURCE[0]}")" 将目录切换到此部署的脚本目录。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这不是亚马逊要求我们做的事情
    • @VictorFerreira 关键是将您的修订文件映射到绝对路径,请参阅我的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 2020-04-25
    • 1970-01-01
    • 2019-01-03
    • 2022-05-28
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多