CodeDeploy работает устаревший файл appspec? - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в AWS CodeDeploy, на самом деле я просто экспериментирую.

Я пытаюсь справиться с непрерывной интеграцией, используя CircleCI 2.0 и AWS CodeDeploy, чтобы при внесении изменений в мой проект django в разработку на github он собирался в CircleCI, а затем отправлял развертывание на S3, после чего изменения развернут в EC2.

Я выполнил все настройки в CodeDeploy и скопировал спецификацию приложения у парня из github, который использовал CodeDeploy с проектом Django / DRF (таким как мой). Разница лишь в том, что он использовал другое ядро ​​в своем экземпляре EC2 (я думаю, что AWS linux), а я использую Ubuntu. Поэтому мне пришлось изменить имя пользователя в разделе runas каждой части hooks. При первом запуске команды create-deploy в aws cli развертывание завершилось неудачно с этим сообщением:

LifecycleEvent - ApplicationStop
Script - scripts/stop_application.sh
[stderr]No passwd entry for user 'ec2-user'

Как оказалось, я забыл поменять пользователя runas в хуке ApplicationStop. Затем я изменил его, снова сделал push и create-deploy, но ошибка остается прежней. Нужно ли делать что-то еще, чтобы изменения в спецификации приложения учитывались или почему это происходит?

Вот файл appspec.yml :

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/taptop_web
permissions:
  - object: /home/ubuntu
    pattern: "**"
    owner: ubuntu
    group: ubuntu
hooks:
  BeforeInstall:
    - location: scripts/clean_instance.sh
      timeout: 6000
      runas: root
  AfterInstall:
    - location: scripts/install_os_dependencies.sh
      timeout: 6000
      runas: root
    - location: scripts/install_python_dependencies.sh
      timeout: 6000
      runas: ubuntu
    - location: scripts/migrate.sh
      timeout: 6000
      runas: ubuntu
  ApplicationStart:
    - location: scripts/start_application.sh
      timeout: 6000
      runas: ubuntu
  ApplicationStop:
    - location: scripts/stop_application.sh
      timeout: 6000
      runas: ubuntu

И stop_application.sh

#!/usr/bin/env bash
cd /home/ubuntu/taptop_web
ps auxw | grep runserver | awk '{print $2}' | xargs kill

1 Ответ

0 голосов
/ 15 мая 2018

Единственное, что вам нужно сделать, чтобы решить вашу проблему - это успешно выполнить развертывание. Он выглядит так, как будто он не обновлялся, потому что при развертывании он будет запускать ApplicationStop из предыдущей версии. Это часто сбивает с толку, но это работает таким образом, потому что только редакция должна знать, как остановить свое собственное приложение - если команды останова менялись между редакциями, новая команда останова не будет работать.

При этом, как правило, проблема заключается в том, что у клиентов есть сценарий ApplicationStop, который выходит из строя из-за проблемы в сценарии, поэтому развертывание будет продолжаться без вмешательства. Если есть проблема, следуйте этому руководству , чтобы выйти из ситуации.

...