CodeDeploy在代理安装文件夹中钩挂正在运行的脚本

问题描述 投票:0回答:1

所以,我正在设置我的第一个使用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个回答
0
投票

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

在脚本中设置一个变量,并将其用于以后的所有引用。

deploy_root=/home/ubuntu/myapp
sh $deploy_root/init.sh
© www.soinside.com 2019 - 2024. All rights reserved.