CodeDeploy перехватывает запущенные скрипты в папке установки агента - PullRequest
0 голосов
/ 08 января 2020

Итак, я настраиваю свое первое приложение, которое использует CodeDeploy (EC2 + S3), и мне очень трудно понять, как запускать сценарии после установки.

Итак, я определил хук AfterInstall в файле AppSpe c, ссылающийся на мой файл сценария bash в директории проекта. Когда команды в скрипте выполняются, я получаю сообщение об ошибке, указывающее, что файлы не могут быть найдены. Поэтому я поставил команду ls перед всем этим и проверил журналы.

Мой файл сценария работает в папке агента CodeDeploy. Там было много файлов, которые я случайно создал во время тестирования, но ожидал, что они будут в папке моего проекта root.

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

appspe c .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, он не выводит список файлов в каталоге моего проекта root , Я также попробовал $ {PWD} вместо ./, и это не сработало. Он копирует файл сценария в папку агента и запускает его.

См. Это https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

Это написано в конце вышеуказанного документа

Расположение сценариев, указанное вами в разделе 'hooks', относительно root пакета ревизий приложения. В предыдущем примере файл с именем RunResourceTests. sh находится в каталоге с именем Scripts. Каталог Scripts находится на уровне root пакета.

Но, очевидно, он относится к путям только в файле appspe c.

Может кто-нибудь помочь? Это правильно? Я ДОЛЖЕН использовать абсолютные пути, жестко запрограммированные в файле скрипта?

1 Ответ

2 голосов
/ 08 января 2020

Да, правильно. Сценарий не выполняется в папке назначения, как вы могли ожидать. Чтобы разрешить пути к файлам в сценариях жизненного цикла, нужно жестко указать ссылку на каталог назначения /home/ubuntu/myapp.

Сначала используйте cd, чтобы изменить каталог:

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

...