Сбой развертывания кода с ошибкой Errno::ENOEXEC с сообщением об ошибке формата Exec

#python #amazon-web-services #aws-code-deploy

Вопрос:

У меня есть CodeDeploy, который развертывает приложение в экземплярах Windows. У меня есть скрипт на Python, который выполняется как часть ValidateService крючков. Ниже приведен код, который у меня есть в этом скрипте:

 print("hello")
 

Итак, я удалил все и просто распечатал hello как часть этого сценария. Когда этот скрипт вызывается CodeDeploy, я получаю ошибку ниже:

ошибка

Мое appspec.yml досье:

   ...
  ValidateService:
    - location: scripts/verify_deployment.py
      timeout: 900
 

Я попытался получить некоторую помощь в Google, но ничего не получил. Может кто-нибудь, пожалуйста, помочь мне здесь.

Спасибо

Комментарии:

1. Что у appspec.yml тебя такое ? Какие экземпляры вы используете? Ubuntu?

2. Это экземпляр Windows.

3. Пожалуйста, поделитесь своим файлом appspec.yml в вопросе. По крайней мере, те части, в которых вы настраиваете крючок службы проверки подлинности.

4. @OluwafemiSule Я добавил сейчас, пожалуйста, посмотрите. Спасибо.

5. Где вы обнаружили, что вы можете использовать скрипты python verify_deployment.py в CodeDeploy?

Ответ №1:

Как уже ответил Маркин в комментарии, я не думаю, что вы можете просто запускать скрипты python в CodeDeploy. По крайней мере, не по происхождению.

Ошибка, которую вы видите, означает, что Windows не знает, как выполнить предоставленный вами сценарий. AFAIK Windows не может запускать python изначально (как и большинство дистрибутивов Linux).

Я не очень привык к развертыванию кода, но, учитывая пример на https://github.com/aws-samples/aws-codedeploy-samples/tree/master/applications/SampleApp_Windows, Я думаю, что сначала вам нужно установить python.

Комментарии:

1. Я не могу найти никакой документации, в которой прямо указано, что она использует только оболочку, но это подразумевается в приведенных выше примерах, и здесь объясняется, как запускать другие сценарии: docs.aws.amazon.com/codedeploy/latest/userguide/…

2. @thetillhoff У меня уже установлен Python на серверах, и я также установил Python в путь к среде.

3. @GeoffreyBurdett вы правы. В документе говорится: «Вы можете запускать сценарии любого типа, если они поддерживаются операционной системой, работающей на экземплярах», и у меня установлен Python, так что он должен был работать на меня.

Ответ №2:

После стольких исследований я нашел свой ответ. Проблема немного вводит в заблуждение, она не имеет ничего общего с форматом кода или ENOEXEC. Проблема была связана с путем Python. Во время выполнения моего сценария CodeDeploy не смог найти Python (хотя я уже добавил python.exe в переменной окружения path).

Кроме того, я обнаружил, что CodeDeploy не может выполнить файл .py из-за проблемы с путем Python. Итак, я создал скрипт PowerShell и оттуда вызвал скрипт Python. Как показано ниже:

 C:Users<username>AppDataLocalProgramsPythonPython37-32python.exe C:Users<username>Documentsverify_deployment.py
 

Он успешно выполнил скрипт Python и выдал мне результат ниже:

 hello