cloudbuild.yaml конвейер сборки для приложения python flask на вычислительном движке gcloud - PullRequest
0 голосов
/ 06 марта 2020

У меня есть приложение Python Flask, для которого требуется библиотека, которая не установлена ​​на экземплярах Gcloud Compute (libsndfile1) - и поэтому я не могу запустить это через механизм приложений. Я настроил конвейер облачной сборки, поэтому мой cloudbuild.yaml срабатывает каждый раз, когда я запускаю sh, чтобы освоить репо. Вот мои 2 вопроса:

(1) Где cloudbuild.yaml выполняет свои инструкции?

(2) Как заставить cloudbuild.yaml выполнить apt-get install libsndfile1 python3 python3-pip, а затем выполнить pip3 install requirements.txt где needs.txt - это файл в репо, который запускает сборку в облаке.

отказ от ответственности, я ультра-новичок с docker, но если вы думаете, что docker - единственный способ сделайте это, затем, пожалуйста, объясните, как можно сделать что-то подобное.

Большое спасибо,

Никита

1 Ответ

1 голос
/ 06 марта 2020

Если вас интересует App Engine, я бы порекомендовал перенести ваше приложение в гибкую среду Google App Engine, где вы можете выбрать Настраиваемое время выполнения для вашего Flask приложения. Просто включите шаг в ваш Dockerfile, чтобы установить необходимую библиотеку. Это должно выглядеть примерно так:

FROM python:3.7
WORKDIR /app
COPY . /app
RUN apt-get update &&\
    apt-get install -y libsndfile1
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "main:app", "-b", ":8080", "--timeout", "300"]

И в этом контексте вы можете использовать Cloud Build для довольно простой автоматизации развертываний, следуя соответствующему разделу документации .

Теперь по вашим вопросам.

(1) Где cloudbuild.yaml выполняет свои инструкции?

Здесь вы можете Найдите всю необходимую информацию о том, как Cloud Build работает здесь , и ответьте на свой первый вопрос. Cloud Build - это отдельная служба, которая выполняет каждый этап сборки в контейнере Docker в рамках инфраструктуры Google.

(2) Как заставить cloudbuild.yaml выполнить apt-get install libsndfile1 python3 python3-pip, а затем также выполнить pip3 install requirements.txt, где needs.txt - файл в репо, который запускает сборку облака.

Обратите внимание, что Cloud Build более ориентирован для использования с другими продуктами, такими как Cloud Run, GKE, Cloud Functions и т. Д. c. И единственное, что я видел, как Cloud Build использовался в контексте Compute Engine, это просто создавать образы виртуальных машин с использованием Packer . В этом случае вам нужно создать пользовательский образ со всеми зависимостями, уже установленными в вашем приложении.

Особенности решения будут различаться в зависимости от ОС вашего Compute Engine пример. Но в основном вам нужно сделать следующее:

  1. Загрузить скрипт запуска, который устанавливает libsndfile1, а также все зависимости, указанные в файле requirements.txt, в корзину в облачном хранилище.
  2. Воспользуйтесь преимуществом того, что вы можете использовать gcloud для применения сценария запуска к запущенным экземплярам аналогично.
gcloud compute instances add-metadata example-instance \
    --metadata startup-script-url=gs://bucket/file

и Cloud Builder для gcloud 3. Создайте файл cloudbuild.yaml, который использует 2. и перезапустите экземпляр (не рекомендуется, если ваше приложение работает, поскольку это приведет к простою) аналогично:

cloudbuild.yaml

steps:
- name: gcr.io/cloud-builders/gcloud
  args: ['compute', 'instances', 'add-metadata', 'example-instance','--metadata startup-script-url=gs://bucket/file']
- name: gcr.io/cloud-builders/gcloud
  args: ['compute', 'instances', 'reset', 'example-instance']
Предоставьте учетной записи службы облачной сборки достаточно разрешений для выполнения этой задачи ( Вычислите администратора и Администратор хранилища ). Запустите сборку.

Я поделился предыдущими шагами, чтобы ответить на ваш конкретный вопрос, но настаиваю на том, что моя рекомендация будет состоять в том, чтобы перенести приложение в среду App Engine Flexible с настраиваемой средой выполнения, как описано выше.

...