【问题标题】:CodeDeploy hooks running scripts in the agent instalation folderCodeDeploy 挂钩代理安装文件夹中的运行脚本
【发布时间】:2020-04-25 11:58:43
【问题描述】:

所以,我正在设置我的第一个使用 CodeDeploy (EC2 + S3) 的应用程序,我很难弄清楚如何在安装后运行脚本。

所以我在 AppSpec 文件中定义了一个 AfterInstall 挂钩,引用项目目录中的 bash 脚本文件。当脚本中的命令运行时,我收到错误消息,指出找不到文件。所以我在这一切之前放了一个ls 命令并检查了日志。

我的脚本文件正在 CodeDeploy 代理文件夹中运行。那里有很多文件是我在测试时不小心创建的,但我希望它们位于我的项目根文件夹中。

--Root
----init.sh
----requirements.txt
----server.py

appspec.yml

version: 0.0
os: linux
files:
  - source: ./
    destination: /home/ubuntu/myapp
    runas: ubuntu
hooks:
  AfterInstall:
    - location: init.sh
      timeout: 600

init.sh

#!/bin/bash

ls
sudo apt install python3-pip
pip3 install -r ./requirements.txt
python3 ./server.py

所以当ls 执行时,它不会列出我的项目根目录中的文件。我也尝试了 ${PWD} 而不是 ./ 但它没有用。它正在将脚本文件复制到代理文件夹并运行它。

参考这个https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

这写在上面文件的最后

您在“钩子”部分中指定的脚本位置是相对的 到应用程序修订包的根目录。在前面 例如,名为 RunResourceTests.sh 的文件位于名为 脚本。 Scripts 目录位于包的根目录。

但显然它仅指 appspec 文件中的路径。

有人可以帮忙吗?这是正确的吗?我必须在脚本文件中使用硬编码的绝对路径吗?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-code-deploy aws-code-deploy-appspec


    【解决方案1】:

    是的,正确。如您所料,该脚本不会在目标文件夹中执行。您需要对目标目录/home/ubuntu/myapp 的引用进行硬编码,以解析生命周期脚本中的文件路径。

    先用cd改变目录:

    cd  /home/ubuntu/myapp
    ls
    sudo apt install python3-pip
    pip3 install -r ./requirements.txt
    python3 ./server.py
    
    

    【讨论】:

    • 它必须来自文件系统的根目录?或者我可以只使用相对路径?
    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多