Как настроить автодеплой на Облачных функциях

В процессе разработки приложения приходится регулярно вносить изменения в код и пушить (git push) их в репозиторий.

Чтобы поддерживать код в Облачных функциях всегда в актуальном состоянии, можно настроить автодеплой. Для этого нужно:

  1. Получить RC-файл.
  2. Создать функцию с вашим приложением в панели управления Облачной платформой.
  3. Создать функцию автодеплоя в панели.
  4. Настроить webhook в репозитории на GitHub.

Получение RC-файла

Чтобы настроить внешний доступ к проекту, нужно получить переменные окружения из RC-файла.

Для этого в панели управления Облачной платформой:

  1. Создайте пользователя и добавьте его в проект по инструкции Управление доступом пользователей.
  2. Перейдите в раздел Доступ проекта на вкладку Внешний доступ. Выберите пользователя и скачайте RC-файл.

Создание функции с приложением

Код автодеплоя должен обновлять функцию с кодом вашего приложения. Для этого нужно создать в панели управления функцию и загрузить в нее архив с приложением.

Для этого в панели управления:

  1. Перейдите в раздел Функции и нажмите Создать функцию.
  2. Выберите нужную среду выполнения и введите имя функции, например my_app.
  3. Перейдите на вкладку Код функции. В поле Загрузить выберите Архив.
  4. В поле Код функции нажмите Загрузить и задеплойте архив своего приложения.

Теперь функцию my_app будет обновлять автодеплой.

Создание функции автодеплоя

Чтобы создать функцию, в которой будет храниться код автодеплоя:

  1. Скачайте исходный код с GitHub как архив (CodeDownload ZIP).
  2. Перейдите в панели управления в раздел Функции и нажмите Создать функцию.
  3. Выберите среду выполнения Python 3.7 и введите имя функции, например autodeploy.
  4. Перейдите на вкладку Код функции. В поле Загрузить выберите Архив.
  5. В поле Код функции нажмите Загрузить и загрузите ZIP-файл.
  6. Укажите Путь к файлу: deploy_function/deploy.
  7. В поле Вызываемая функция введите deploy.
  8. В поле Переменные окружения нажмите кнопку Добавить.
  9. Введите данные о вашем репозитории, из которого будет обновляться код, а также данные из RC-файла:
    • ACTION_NAME — имя вашей функции с приложением (my_app);
    • DEPLOY_TOKEN — указывается при условии, что репозиторий приватный. Если репозиторий публичный, то переменную можно не добавлять;
    • REPO_URLgithub.com/{username}/{repository};
    • BRANCH — имя ветки с кодом, готовым для деплоя;
    • OS_PROJECT_DOMAIN_NAME;
    • OS_PROJECT_ID;
    • OS_USER_DOMAIN_NAME;
    • OS_USERNAME;
    • OS_PASSWORD;
    • OS_AUTH_URL.
  10. Нажмите кнопку Сохранить и развернуть.
  11. Перейдите на вкладку Триггеры, включите вызов по HTTP-запросу и скопируйте появившийся URL — он понадобится на следующем этапе.

Теперь при вызове функции autodeploy код вашего приложения my_app будет автоматически обновляться.

Настройка webhook в репозитории на GitHub

На этом этапе нужно объединить репозиторий на GitHub и функцию autodeploy — для этого настройте в репозитории GitHub вебхук (webhook), который при пуше в репозиторий будет вызывать функцию autodeploy через HTTP-запрос.

  1. Перейдите в свой репозиторий на GitHub.
  2. Откройте SettingsWebhooks.
  3. Нажмите кнопку Add webhook.
  4. В поле Payload URL вставьте URL функции autodeploy.
  5. В поле Content type выберите application/json.
  6. В поле Which events would you like to trigger this webhook? выберите Just the push event.
  7. Нажмите Update webhook.

Результат настройки

Автодеплой настроен. После того как вы запушите изменения в репозиторий, вебхук вызовет функцию autodeploy — при этом она обновит функцию с приложением my_app.

Чтобы проверить, что автодеплой работает и функция my_app обновляется, вызовите функцию my_app — она должна возвращать данные в соответствии с изменениями в коде.