Автоматическое развертывание облачных функций Google из Google Cloud Source Control

Я не могу понять, как автоматически развертывать вновь отправленные коммиты облачных функций либо из Cloud Source Control, либо напрямую из GitHub. Я нашел похожее решение, создав другую функцию и GitHub webhook, но поскольку функции не могут работать по SSH (и у них установлены ключи SSH), он работает только с открытыми репозиториями. ( https://cloud.google.com/community/tutorials/cloud-functions-github-auto-deployer)

Есть идеи как этого добиться? Спасибо

2 ответа

Вы можете использовать Google Cloud Builder для достижения этой цели. Создайте триггер в своем хранилище, и сработавшая сборка развернет новый код в Google Cloud Function.

Я сделал быстрый пример: https://github.com/Philmod/auto-deploy-gcf

Ура, Филмод

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

Требуемая настройка

Прежде чем приступить к выполнению этих шагов, вам необходимо настроить ключи SSH в вашей системе CI/CD. Это то, что предоставляет вашей системе сборки ssh доступ к вашему личному репо. Вот пара статей, в которых обсуждается, как это сделать.

Вам также необходимо установить пакет через git+ssh так что это входит в ваш package.json (и опционально yarn.lock).

yarn add git+ssh://git@gitlab.com:erichiggins/top_secret.git

На этом этапе вы должны увидеть следующую запись в вашем package.json:

...
"dependencies": {
  "top_secret": "git+ssh://git@gitlab.com:erichiggins/top_secret.git"
},
...

Установка пакета (дважды)

Вот команды, которые я запускаю внутри сценария оболочки в моей настройке CI/CD, непосредственно перед этапом развертывания, чтобы установить частные репозитории в виде пакетов, использующих git+ssh, Я буду использовать поддельное имя пакета top_secret для моего примера, чтобы сделать это более ясным.

(Я использую yarn и GitLab в этом примере, но то же самое относится к npm и GitHub, если вы предпочитаете.)

yarn install
cd node_modules/top_secret
yarn pack
mv top_secret-v*.tgz ../../
cd ../../
yarn add file:top_secret-v1.0.0.tgz

Примечание: yarn pack Команда выдаст имя файла с номером версии, но вы не можете yarn add с подстановочным знаком (*). Я столкнулся с проблемами, используя yarn pack --filename с общим именем файла без версии, поэтому вам может понадобиться либо жестко закодировать его, либо найти креативное решение, которое использует имя файла, сгенерированное yarn pack,

Результаты

Если вы попытаетесь выполнить эти две команды локально, вы заметите, что в итоге у вас есть только одна новая запись для top_secret внутри dependencies раздел вашего package.json файл, который будет выглядеть так:

"top_secret": "file:node_modules/top_secret",

Вот что происходит:

  1. Вы устанавливаете частное репо в виде пакета через git+ssh в системе, которая имеет доступ.
  2. Вы переупаковываете это из своего node_modules/ каталог в файл tarball (.tgz).
  3. Вы устанавливаете тот же пакет из локального файла tarball, используя file:
  4. Поскольку имя пакета идентично, оно заменяет git+ssh вход в package.json с file: запись.

Теперь ваше развертывание в облачных функциях должно проходить без каких-либо проблем, включая ваш личный пакет. Удачи и дайте мне знать, если у вас возникнут проблемы с этими инструкциями - я был бы рад исправить любые ошибки и переписать все, что неясно.

Альтернативный подход

Если вы не возражаете против дополнительных усилий или частное репо не меняется достаточно часто, чтобы оправдать дополнительную сложность вашего CI/CD, вы также можете использовать npm pack / yarn pack чтобы создать файл tarball, запустите тот же yarn add file:... команда, указанная выше, чтобы изменить ваш package.json и просто проверьте файл tarball в своем репо.

Примечание. Имейте в виду, что если репозиторий, в который вы загружаете файл tarball, является общедоступным, источник вашего личного репо / пакета также будет открыт.

Рекомендации: