gcloud аварийно завершил работу (OSError): [Errno 2] Нет такого файла или каталога: '/workspace/env/bin/python3.7' - PullRequest
0 голосов
/ 10 июля 2020

При попытке развернуть мою службу fastapi python (в App Engine) на этапе развертывания возникает следующая ошибка: ERROR: gcloud crashed (OSError): [Errno 2] No such file or directory: '/workspace/env/bin/python3.7'

Я запускаю развертывание / сборку из мою локальную машину с помощью следующей команды: gcloud builds submit --config config/cloudbuild/deploy.yaml --project $_PROJECT.

Я что-то делаю не так, или что-то не так с построителем gcloud? Я пробовал использовать обе версии Google Cloud SDK 274.0.1 и 300.0.0.

deploy.yaml:

steps:

  # Install gcc
  - name: 'python:3.7'
    id: 'install-dependencies'
    entrypoint: sh
    args:
      - -c
      - apt update && apt-get -y install gcc && python -m pip install -r requirements.txt -t lib

  # Run tests
  - name: 'python:3.7'
    id: 'test'
    env:
      - PYTHONPATH=lib
    entrypoint: python3
    args: ['-m', 'pytest']

  # Deploy
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', '--project', '$PROJECT_ID']

timeout: '1200s'

app.yaml:

runtime: python37
service: my-service
instance_class: F2

entrypoint: gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker
handlers:
  - url: /.*
    script: auto
    secure: always

inbound_services:
- warmup

automatic_scaling:
  min_instances: 1
  min_idle_instances: 1
  max_instances: 2
  max_idle_instances: 1

Вывод сборки:

...
Finished Step #1 - "test"
Starting Step #2
Step #2: Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #2:
Step #2:                    ***** NOTICE *****
Step #2:
Step #2: Official `cloud-sdk` images, including multiple tagged versions across multiple
Step #2: platforms, can be found at
Step #2: https://github.com/GoogleCloudPlatform/cloud-sdk-docker.
Step #2:
Step #2: Suggested alternative images include:
Step #2:
Step #2:     gcr.io/google.com/cloudsdktool/cloud-sdk
Step #2:     gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
Step #2:     gcr.io/google.com/cloudsdktool/cloud-sdk:debian_component_based
Step #2:     gcr.io/google.com/cloudsdktool/cloud-sdk:slim
Step #2:
Step #2: Please note that the `gcloud` entrypoint must be specified when using these
Step #2: images.
Step #2:
Step #2:                 ***** END OF NOTICE *****
Step #2:
Step #2: Services to deploy:
Step #2:
Step #2: descriptor:      [/workspace/app.yaml]
Step #2: source:          [/workspace]
Step #2: target project:  [my-project]
Step #2: target service:  [my-service]
Step #2: target version:  [20200710t134102]
Step #2: target url:      [https://my-service.uc.r.appspot.com]
Step #2:
Step #2:
Step #2: Do you want to continue (Y/n)?
Step #2: Beginning deployment of service [my-service]...
Step #2: Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Step #2: ERROR: gcloud crashed (OSError): [Errno 2] No such file or directory: '/workspace/env/bin/python3.7'
Step #2:
Step #2: If you would like to report this issue, please run the following command:
Step #2:   gcloud feedback
Step #2:
Step #2: To check gcloud for common problems, please run the following command:
Step #2:   gcloud info --run-diagnostics
Finished Step #2
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1

1 Ответ

1 голос
/ 10 июля 2020

Cloud Build - это, по сути, конвейер контейнеров, применяемых к общей файловой системе (/workspace).

Единственное состояние, которое вам доступно, - это /workspace.

Каждый шаг неявно монтирует /workspace.

Ваш шаг № 0 в основном избыточен. Он применяет apt к образу контейнера, созданному на шаге # 0 (и может как побочный эффект), обновляет также смонтированный /workspace, но эти обновления отбрасываются (за исключением изменений /workspace, когда этот шаг завершается. Вы не должны Не пытайтесь обновить /workspace, например, с помощью Python модулей, которые вы собираетесь использовать на следующих шагах.

Я подозреваю, что вы устанавливаете pytest с requirements.txt на шаге 0, но это неверно применяется к шагу № 1. Использование pytest. Что вам нужно сделать, так это создать контейнер, который включает pytest, чтобы вы могли запустить pytest на этом шаге.

Если вы отбросите все За исключением шага 2, он должен работать (у меня он работает).

Если вы используете sh для запуска pytest, вам понадобится образ контейнера, который включает его, чтобы вы могли запустить этот изолированный шаг перед развертыванием.

...