amazon-web-services - CodeDeploy 挂钩代理安装文件夹中的运行脚本
问题描述
所以,我正在设置我的第一个使用 CodeDeploy (EC2 + S3) 的应用程序,我很难弄清楚如何在安装后运行脚本。
因此,我在 AppSpec 文件中定义了一个 AfterInstall 挂钩,该挂钩引用了项目目录中的 bash 脚本文件。当脚本中的命令运行时,我收到错误消息,指出找不到文件。所以我ls
在这一切之前放了一个命令并检查了日志。
我的脚本文件在 CodeDeploy 代理文件夹中运行。我在测试时不小心创建了许多文件,但我希望它们位于我的项目根文件夹中。
--Root
----init.sh
----requirements.txt
----server.py
应用规范.yml
version: 0.0
os: linux
files:
- source: ./
destination: /home/ubuntu/myapp
runas: ubuntu
hooks:
AfterInstall:
- location: init.sh
timeout: 600
初始化文件
#!/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 的目录中。Scripts 目录位于包的根级别。
但显然它仅指 appspec 文件中的路径。
有人可以帮忙吗?这是正确的吗?我必须在脚本文件中使用硬编码的绝对路径?
解决方案
是,对的。如您所料,该脚本不会在目标文件夹中执行。您需要对目标目录的引用进行硬编码,/home/ubuntu/myapp
以解析生命周期脚本中的文件路径。
首先使用 cd 更改目录:
cd /home/ubuntu/myapp
ls
sudo apt install python3-pip
pip3 install -r ./requirements.txt
python3 ./server.py
推荐阅读
- typescript - 有条件的必填参数
- java - JDK 8 ('1.8.*') 错误的要求检查失败
- flutter - 仅在热重载后检索数据
- javascript - 承诺等待返回待处理
- r - 根据模式删除部分字符串
- php - 将 SQL 表输出到 wordpress 网站的前端
- angular - Angular Material - Mat-table 不显示来自 REST API 的数据
- python - 如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?
- roblox - (仍然与roblox相关)倒计时停留在15并且玩家2在倒计时结束后加入时不会出现帧
- list - 取消 sap.m.List 的悬停功能?