Автоматическое развертывание облачных функций 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",
Вот что происходит:
- Вы устанавливаете частное репо в виде пакета через
git+ssh
в системе, которая имеет доступ. - Вы переупаковываете это из своего
node_modules/
каталог в файл tarball (.tgz). - Вы устанавливаете тот же пакет из локального файла tarball, используя
file:
- Поскольку имя пакета идентично, оно заменяет
git+ssh
вход вpackage.json
сfile:
запись.
Теперь ваше развертывание в облачных функциях должно проходить без каких-либо проблем, включая ваш личный пакет. Удачи и дайте мне знать, если у вас возникнут проблемы с этими инструкциями - я был бы рад исправить любые ошибки и переписать все, что неясно.
Альтернативный подход
Если вы не возражаете против дополнительных усилий или частное репо не меняется достаточно часто, чтобы оправдать дополнительную сложность вашего CI/CD, вы также можете использовать npm pack
/ yarn pack
чтобы создать файл tarball, запустите тот же yarn add file:...
команда, указанная выше, чтобы изменить ваш package.json
и просто проверьте файл tarball в своем репо.
Примечание. Имейте в виду, что если репозиторий, в который вы загружаете файл tarball, является общедоступным, источник вашего личного репо / пакета также будет открыт.
Рекомендации:
- Документация для
yarn add
- Документация для
yarn pack
- Документация для
npm pack
- Документация для
npm install
- Gitlab CI 101 - SSH ключи
- Альтернатива частным модулям npm