Как я могу развернуть в Google App Engine приложение, которое зависит от рабочих пространств пряжи, без публикации пакетов в реестре npm? - PullRequest
2 голосов
/ 16 июня 2020

В настоящее время я переношу наш монорепозиторий на рабочие области пряжи. Он содержит несколько пакетов и услуг. Услуги зависят от пакетов в соответствующем package.json. Я хотел бы развернуть свои службы в Google App Engine без публикации sh пакетов в частном npm реестре.

Мне удалось развернуть одну службу, используя настраиваемую среду выполнения и переместив app.yaml и Dockerfile в root монорепозитория, чтобы иметь доступ к пакетам и сервису в контексте сборки. Проблема в том, что у меня несколько сервисов, и я не могу иметь все файлы докеров в root монорепозитория, так как они должны быть названы Dockerfile, и я не могу изменить контекст сборки.

Я вижу 2 простых решения:

Первое - переместить app.yaml и Dockerfile соответствующей службы в root монорепозитория перед развертыванием. Но это выглядит довольно грязно и сделает код CI очень сложным.

Второй - иметь одиночные Dockerfile и service1.yaml, service2.yaml et c. в root монорепозитория и передать переменные в Dockerfile. Проблема в том, что в документации App Engine я не вижу способа передавать переменные в Dockerfile настраиваемой среды выполнения.

Решение моей мечты - сохранить каждый Dockerfile и app.yaml в каталоге их соответствующих служб и иметь возможность установить контекст сборки через gcloud CLI (как мы можем сделать в docker-compose). Пример:

project
├── package.json
├── packages
│   ├── package1
│   │   ├── package.json
│   │   └── src
│   ├── package2
│   │   ├── package.json
│   │   └── src
│   └── package3
│       ├── package.json
│       └── src
├── services
│   ├── service1
│   │   ├── app.yaml
│   │   ├── Dockerfile
│   │   ├── package.json
│   │   └── src
│   └── service2
│       ├── app.yaml
│       ├── Dockerfile
│       ├── package.json
│       └── src
└── yarn.lock

и запустите что-то вроде: gcloud app deploy services/service1/app.yaml --build-context=.

Но я не вижу никакого способа сделать это в документации.

Вы знаете, как Я могу приблизиться к "решению моей мечты"?

1 Ответ

1 голос
/ 22 июня 2020

Добавление возможных вариантов, предлагаемых в комментариях, для большей наглядности.

Одна из возможностей - сохранить рабочий процесс docker-compose, который вы использовали, и интегрировать его с развертыванием App Engine.

Как вы уже создавали свои docker изображения с docker-compose, чтобы указать контекст сборки, вы можете pu sh результат операций сборки в реестре контейнеров Google, чтобы изображения можно было использовать позже для развертывания App Engine с помощью флага --image-url .

...