Как использовать частный, самостоятельно размещенный пакет NPM с узлом Google App Engine, стандартная среда

#google-app-engine #npm #google-cloud-build #google-appengine-node

#google-app-engine #npm #google-cloud-build #google-appengine-node

Вопрос:

У меня есть пакет NPM, размещенный в частном репозитории Bitbucket git (не в официальном реестре NPM).

У меня есть это в моем package.json, в разделе «зависимости»:

 "a-private-package" git ssh://git@bitbucket.org:myusername/a-private-package.git
  

Это работает, когда я запускаю npm install локально, поскольку используются мои SSH-ключи.

Но когда я использую gcloud app deploy для развертывания в App engine стандартную среду для node, я получаю Host key verification failed сборку из Google Cloud.

Я пытался:

Добавление пользовательского SSH-ключа в Cloud Build.

https://cloud.google.com/cloud-build/docs/access-private-github-repos

Проблема: Нет доступа к cloudbuild.yaml для стандарта GAE; не удается указать git использовать SSH-ключ.

Добавление моего частного репозитория git в исходные коды Google.

Проблема: Нет доступа к cloudbuild.yaml для стандарта GAE; не удается указать git использовать SSH-ключ.

npm pack; npm install

Проблема: не сохраняется история репозиториев / URL.

Возможно ли это на самом деле?

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

1. Вы ознакомились с этой статьей ? В нем упоминается использование cloudbuild. yaml со стандартом GAE и привязкой Bitbucket к нему.

2. У меня нет, но я посмотрю. Я не думаю, что это сработало бы в качестве примеров вызовов gcloud app deploy из сборки, которые запустили бы другую новую сборку без SSH-ключа, установленного в слоях перед ней?

3. Что ж, статья запускается gcloud app deploy после того, как он определит cloudbuild.yaml . Я вижу, что вы получаете Host key verification failed ошибку при облачной сборке и добавляете SSH-ключи к . файл yaml мог бы это исправить, но вы также говорите, что не можете изменить cloudbuild.yaml . Почему вы не можете изменить cloudbuild.yaml ?

4. gcloud app deploy запустит новую свежую сборку (из первой сборки) с пустым cloudbuild.yaml . Я думаю, что это основная проблема (которую вы не можете настроить, cloudbuild.yaml что gcloud app deploy использует). Если вы просматриваете комментарии к этой статье, у кого-то еще возникает такая же проблема. Хотя спасибо за ссылку.

5. @zino вы когда-нибудь находили решение для этого?

Ответ №1:

Невозможно изменить cloudbuild.yaml при запуске gcloud app deploy . Вместо этого вы должны создать новый cloudbuild.yaml и выполнить его с помощью gcloud builds submit --config=cloudbuild.yaml . В этом случае gcloud app deploy будет выполняться внутри cloudbuild.yaml .

Я попробовал шаги, описанные для подключения к частному репозиторию Github и изменения значений, чтобы они соответствовали bitbucket, но не смог. Таким образом, я создал этот запрос функции для улучшения документации


Использование облачных репозиториев исходных текстов

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

В этом случае облачные репозитории с исходным кодом имеют встроенную функцию для прямого зеркального отображения в Bitbucket (общедоступные и частные репозитории).

Шаги:

1) Создайте в корневой папке вашего приложения a cloudbuild.yaml со следующим кодом:

 steps:
# NPM install
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
#Test
- name: 'gcr.io/cloud-builders/npm'
  args: ['test']
#Deploy
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy"]
  

2) Подключите облачные репозитории исходных текстов к Bitbucket

3) Создайте триггер облачной сборки (чтобы новый код, отправленный в репозиторий, был автоматически развернут)

4) Отправьте корневую папку, содержащую app.yaml и cloudbuild.yaml , в репозиторий

Теперь он должен быть синхронизирован с облачными репозиториями исходных текстов и должен запустить облачную сборку для развертывания.

Ответ №2:

К сожалению, вам нужно будет вставить имя пользователя / пароль в package.json, но вы, вероятно, можете использовать конечную точку https:

 "a-private-package": "git https://myusername:password@bitbucket.org/myusername/a-private-package.git"
  

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