Я развертываю свой сайт с помощью AWS codedeploy. Шаг остановки моего приложения выглядит так:
ApplicationStop:
- location: deploymet/codedeploy/commands/application-stop/remove-self-from-loadbalancer.sh
timeout: 600
runas: root
А этот скрипт выглядит так:
source ~/.bashrc
cd /var/www/html/laravel
if [ "$LARAVEL_ENV" = "production" ]
then
php artisan deployment:remove-self-from-loadbalancer --env=$LARAVEL_ENV
fi
Запуск сценария вручную занимает около секунды, но при запуске развертывания он зависает и завершается сбоем через 30 секунд, бросая Script at specified location: deploymet/codedeploy/commands/application-stop/remove-self-from-loadbalancer.sh failed to complete in 30 seconds
.
Используемый источник устанавливает env в production, и я вижу ожидаемый эффект: сервер удаляется из балансировщика нагрузки почти сразу после запуска развертывания.
Насколько я понимаю, этот таймаут не должен происходить раньше, чем через 10 минут. Почему это происходит так быстро?
Мы смогли это решить. Чтение документация Тщательно, мой коллега сделал предложение. Агент CodeDeploy сохраняет последнюю успешную установку развертывания в /opt/codedeploy-agent/deployment-root/some-dir/some-other-dir
. Во время следующего развертывания спецификации приложений и хранящиеся там сценарии используются для первых шагов развертывания. Поэтому нам пришлось войти на каждый сервер, перейти в этот каталог и вручную изменить время ожидания в спецификации приложений.