2016-08-03 4 views
1

Когда я запускать через Jenkins (код развертывания плагин), я получаю следующее сообщение об ошибке -Дженкинс вызвал код развертывания происходит сбой на ApplicationStop этапе, даже если та же группа развертывания с помощью кода Deploy непосредственно работает успешно

No such file or directory - /opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/d-8C01LCBMG/deployment-archive/appspec.yml 

Однако, если я запускаю развертывание в ту же группу развертывания с помощью прямого развертывания кода и задаю один и тот же почтовый индекс в S3 (полученный через триггер Jenkins), этот шаг проходит.

Что это значит и как мне найти обходной путь? В настоящее время я работаю над интеграцией нескольких вещей, и поэтому вам нужно будет развернуть через развертывание кода и через Jenkins одновременно. Я буду запускать развертывание с развертыванием кода, когда мне нужно будет убедиться, что блок меньшего размера работает нормально.

Update

Просто упомянуть еще один момент, в случае, если он применяется. Раньше я использовал другое «приложение» и «группу развертывания» в тех же экземплярах ec2, что и использование jenkins и кода. Чтобы исправить некоторую проблему (не позволяя перезаписывать существующие файлы из-за неудачных развертываний, предположительно), я удалил все в каталоге /opt/codedeploy-agent/deployment-root/<directory containing deployments>, пытаясь следовать тому, что было упомянуто в this answer. Однако обратите внимание, что я удалил только элементы внутри этого каталога. После этого я начал получать эту ошибку appspec.yml не найден в архиве развертывания. Итак, я создал новую группу приложений и развертывания, и с тех пор я работаю над этим.

Итак, еще один момент, который следует учесть, заключается в том, следует ли мне делать дополнительную очистку, если развертывание, инициированное jenkins, каким-то образом по-прежнему затрагивается этими удалениями (хотя оно относится к новой группе приложений и развертывания).

+0

Можете ли вы предоставить список содержимого/opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/d-8C01LCBMG/архив развертывания, пожалуйста? –

+0

@RodrigoM каталог 'd-8C0 1LCBMG' отсутствует внутри'/opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/'вообще. Кажется, это старый идентификатор развертывания, и каждый раз, когда я пытаюсь сделать сборку из jenkins, он ищет эту конкретную сборку. Я не уверен, почему он пытается найти это, когда файл appspec присутствует в zip-архиве. Возможно ли, что он каким-то образом не может получить доступ к файлу на этапе приложения и, следовательно, ищет в архиве? Или это похоже на содержимое архива, так или иначе, независимо от этого? –

+0

Бинго. См. Мой ответ ниже. –

ответ

3

В рамках своего процесса CodeDeploy должен ссылаться на предыдущие развертывания для операций Redeployments and Deployment Rollbacks. Эти ссылки поддерживаются вне папок архива развертывания. Если вы удаляете эти архивы вручную, как вы указываете, то установка CodeDeploy может быть полностью повреждена: ссылки, оставшиеся до предыдущих развертываний, более не корректны или несовместимы, а развертывания не удастся.

Лучшее на этом этапе - полностью удалить старую установку и переустановить. Это позволит агенту развертывания кода снова работать правильно.

Я узнал, что трудно удалить/изменить любые из CodeDeploy установить папки или файлы вручную. Даже если вы меняете приложения или группы развертывания, CodeDeploy сама выяснит это, без необходимости ручной очистки.

+1

В настоящее время у агента-агента CodeDeployment есть 7 событий жизненного цикла, а жизненный цикл ApplicationStop - последний успешный архив развертывания. Поэтому, если последний удаленный архив развертывания удален, текущее развертывание не будет выполнено. – binbinlu

+0

Хорошо, я понял. Я удалю codedeploy в этих случаях, а затем переустановить на них. Однако не будут ли эти приложения и идентификаторы развертывания по-прежнему сохраняться на консоли aws? Кроме того, у меня создалось впечатление, что для того, чтобы установить codedeploy в экземпляр, это необходимо сделать, когда экземпляр воспитывается в первый раз. Я сам не занимался настройкой, поэтому хотел бы подтвердить, что рассказала наша команда разработчиков. Как я могу продолжить работу после переустановки? Создать новую группу приложений и развертывания? –

+0

И, наконец, я просто хотел подтвердить, есть ли такое ограничение, наложенное codedeploy для перезаписывания файлов во время развертывания, если раньше было неудачное развертывание? Как упоминалось в моем обновлении к вопросу, я получал ошибку «Файл уже существует в местоположении» и пытался удалить содержимое корня развертывания. –

0

Для развертывания пакет должен содержать файл appspec.yml, и файл необходимо поместить в верхний каталог. Похоже, сообщение об ошибке связано с тем, что агент-хозяин не может найти файл appspec.yml.

+0

Я проверил, что файл appspec.yml присутствует в архиве S3. Поскольку он присутствует, развертывание, выполняемое при развертывании кода, может успешно выполнить это. Я предполагаю, что это имеет какое-то отношение к запущенному jenkins развертыванию, не имеющему доступа к файлу. –

+0

@SandeepanNath У вас есть решение? –