- PVSM.RU - https://www.pvsm.ru -

На примере gitlab бота я покажу, каким образом можно автоматизировать процесс релиза для serverless функций через автоматическое их обновление из git репозитория. Переходим от игр к практической разработке на serverless.
Представьте, что вам нужно автоматизировать процесс реакции на создание задач/багов в вашем трекере, например Gitlab (Issues) или Jira. Вам может потребоваться автоматически добавлять исполнителя в зависимости от тегов, двигать задачу на определенный milestone, добавить комментарий или просто закрыть противный баг. Все это очень легко делается с помощью serverless функций. В качестве примера мы возьмем добавление комментария (Note в терминологии Gitlab) к вновь созданной задаче (Issue).
А так как бот может часто меняться, то мы автоматизируем его релиз с помощью автоматической синхронизации функции с git репозиторием, где она лежит.
Для начала нам нужно создать проект на Gitlab. Если у вас нет аккаунта Gitlab, то его можно создать здесь [1]. Создать новый публичный проект можно, например, сделав форк моего проекта https://gitlab.com/bbelky/gitbotswf [2], нажав кнопку Fork в правом верхнем углу.

Чтобы иметь возможность редактировать код бота его нужно склонировать локально. На самом деле для целей этого гайда мы можем делать это и онлайн, но будем ближе к реальной жизни. Откройте свой терминал и склонируйте git репозиторий. Ссылку можно найти в правом верхнем углу вашего проекта Clone > Clone with HTTPS. Сохраните ее как Gitlab URL, она нам еще пригодится.
git clone <link to your repo>
cd gitbotswf/
ls
README.md main.go
В клонированном репозитории есть файл main.go. Это и есть наш бот, написанный на golang. Бот очень простой: он получает webhook от Gitlab по событию создания новой задачи (Issue) и добавляет комментарий (note в терминологии Gitlab) к созданной задаче. В main.go есть комментарии, которые помогут вам разобраться в том, как устроен бот. Не будем останавливаться на этом подробнее.
Не закрывайте терминал — чуть позже нам потребуется редактировать файл main.go.
Также нам нужно создать Gitlab API Token, чтобы обращаться к API гитлаба.
Время создать сам бот. Создадим serverless функцию с кодом нашего бота на базе serverless платформы Swifty [3]. Если у вас еще нет аккаунта на Rusonyx Swifty, то время его создать [4]. Мы хотим автоматизировать процесс деплоя новой функции, поэтому проделаем следующую последовательность: подключим наш гит репозиторий, создадим функцию на основе кода из гит, а также поместим gitlab api token в безопасное хранилище.


Теперь Swifty будет автоматически синхронизироваться с вашим репозиторием (делать git pull) каждый 30 минут. Теперь создадим саму функцию:

Теперь нам нужен HTTP API триггер, при вызове которого функция будет срабатывать:

Отлично, теперь у нас есть репозиторий и функция, которая синхронизируется с ним автоматически. Теперь добавим наш Gitlab API Token в Swifty Accounts — безопасное и шифрованное хранилище для паролей и токенов.

Теперь добавим токен в функцию:
На последнем этапе нам нужно создать webhook на Gitlab, который будет срабатывать каждый раз при создании новой Issue. Перейдем в Gitlab.
Перейдем в проект на Gitlab, на вкладку Issues и создадим новую Issue. Проверим комментарии. Ага! Если, все сработало хорошо, то мы увидим комментарий «Thanks for reporting new issue!». Если где-то случилась ошибка, то спросите нас здесь или задайте вопрос в слеке [6].
Что, если нам нужно обновить наш бот? Благодаря проделанной интеграции с гит, все что вам нужно это обновить ваш код (измените текст note, например), запушить код в Gitlab и Swifty автоматически обновит вашу функцию!
Итак, открываем файл main.go в терминале и меняем переменную note:
note := "Comments%20changed!"
Обновляем гит:
git add *
git commit -m "changes"
git push origin master
Go serverless!
Автор: Vladimir Porokhov
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/308687
Ссылки в тексте:
[1] здесь: http://gitlab.com
[2] https://gitlab.com/bbelky/gitbotswf: https://gitlab.com/bbelky/gitbotswf
[3] Swifty: https://swifty.cloud/
[4] создать: https://swifty-connector.rusonyx.ru/signup
[5] gitlab.com/bbelky/gitbotswf.git: https://gitlab.com/bbelky/gitbotswf.git
[6] слеке: https://join.slack.com/t/swiftycloud/shared_invite/enQtNDk1Nzk5NTQ1OTIzLWVhNWY3ZDZmNmQ1YTBlZGNlN2IzMmNhYmEzNTNkOGU2MzdmZWE3YTBiMjVjYWI5Y2FhMTUwMWUyOTNkZGE5OTM
[7] Источник: https://habr.com/ru/post/439920/?utm_source=habrahabr&utm_medium=rss&utm_campaign=439920
Нажмите здесь для печати.