В этом практическом руководстве вы развернете веб-приложение из репозитория с помощью CI/CD SourceCraft. Приложение состоит из следующих компонентов:
Фронтенд — статический сайт на SourceCraft Sites с полем для ввода имени и кнопкой Hello.
Бэкенд — функция Yandex Cloud Functions на Python, которая возвращает приветствие Hello, <имя>!.
шлюз Yandex API Gateway, который принимает запросы от фронтенда и вызывает функцию.
Код приложения и конфигурация CI/CD хранятся в репозитории SourceCraft. Ресурсы Yandex Cloud создаются через сервисное подключение.
Этот сценарий подходит для прототипов и небольших проектов: вам не нужно управлять серверами, а SourceCraft Sites предоставляет бесплатный хостинг с доступом по HTTPS без загрузки собственного TLS-сертификата.
Для создания сервисного подключения на уровне организации нужна роль Администратор организации (organization-manager.admin) или Владелец организации (organization-manager.organizations.owner).
Важно
Публикация сайта возможна только из публичного репозитория в публичной организации SourceCraft. Файлы репозитория будут доступны всем пользователям интернета. Не сохраняйте в них токены, ключи доступа и другие секреты. Сервисное подключение позволяет обращаться к Yandex Cloud без хранения долгоживущих ключей в коде.
Выберите подготовленную публичную организацию и укажите название репозитория, например sourcecraft-sites-web-app.
Выберите для ответвления основную ветку master и нажмите Создать ответвление.
В репозитории находятся:
.sourcecraft/ci.yaml — конфигурация CI/CD с рабочими процессами create-resources и delete-resources.
.sourcecraft/sites.yaml — конфигурация публикации сайта из директории sites в ветке release.
sites/ — HTML и JavaScript фронтенда. Файл sites/config.js содержит адрес API-шлюза, который рабочий процесс подставляет при развертывании.
src/index.py — код функции на Python.
yc-scripts/ — скрипты для получения IAM-токена, создания и удаления ресурсов Yandex Cloud.
Примечание
Клонирование примера на локальный компьютер не создает репозиторий в вашей организации. Для выполнения руководства используйте созданное ответвление в SourceCraft.
Создайте сервисное подключение
Создайте подключение на уровне организации. Имя default-service-connection должно совпадать с указанным в .sourcecraft/ci.yaml.
В SourceCraft откройте организацию, в которой вы создали ответвление репозитория.
В разделе Настройки перейдите в секцию Сервисные подключения.
В правом верхнем углу нажмите Новое сервисное подключение.
В блоке Базовая информация укажите название default-service-connection.
В блоке Область применения разрешите использование для всех репозиториев.
В блоке Настройки Yandex Cloud выберите подготовленный каталог и сервисный аккаунт sites-web-app-sa.
Совет
Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите Синхронизировать. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт.
Нажмите Создать сервисное подключение и дождитесь окончания операции.
Чтобы отредактировать файл в интерфейсе SourceCraft, откройте его и нажмите Редактировать. После редактирования каждого файла нажмите Сохранить изменения и выполните коммит в ветку master.
Откройте файл .sourcecraft/ci.yaml.
Убедитесь, что в блоке tokens:SERVICE_CONNECTION_WITH_TOKEN:service_connection указано название сервисного подключения, созданного ранее.
В блоке env проверьте имена функции (YC_FUNCTION_NAME) и API-шлюза (YC_API_GATEWAY_NAME).
Важно
Убедитесь, что в выбранном каталоге облака нет функции и API-шлюза с такими именами. Если они уже существуют, задайте другие имена: рабочий процесс обновляет существующую функцию, а при удалении ресурсов использует имена из этой конфигурации.
Разверните приложение
В своем репозитории в разделе Автоматизации перейдите в секцию CI/CD.
Нажмите Новый запуск.
Выберите ветку master для конфигурации и запуска, рабочий процесс create-resources и нажмите Запустить.
Дождитесь, пока рабочий процесс завершится со статусом Успех. Если процесс завершился с ошибкой, откройте его и проверьте логи кубика, который не удалось выполнить.
Рабочий процесс получает IAM-токен через сервисное подключение, создает функцию и ее версию, затем создает API-шлюз с маршрутом GET /hello/{name}. После этого он записывает адрес шлюза в файл sites/config.js и публикует файлы в ветке release.
Файл .sourcecraft/sites.yaml в основной ветке уже настроен на публикацию из ветки release:
site:root:sitesref:release
После появления этой ветки сайт публикуется автоматически в течение нескольких минут.
Проверьте работу приложения
Откройте в браузере https://<слаг_организации>.sourcecraft.site/<название_репозитория>/.
В поле Name введите имя, например Alice, и нажмите Hello.
Убедитесь, что под кнопкой появилось приветствие Hello, Alice!.
Удалите ресурсы Yandex Cloud
В своем репозитории вручную запустите рабочий процесс delete-resources из ветки master.
Дождитесь его успешного завершения. Рабочий процесс удалит API-шлюз и функцию с именами из .sourcecraft/ci.yaml.
Вы также можете удалить API-шлюз и функцию в консоли Yandex Cloud.
Если сервисный аккаунт sites-web-app-sa больше не используется, удалите его после удаления функции и API-шлюза.
Снимите сайт с публикации
Удаление функции и API-шлюза не снимает статический сайт с публикации. После удаления облачных ресурсов, удалите файл .sourcecraft/sites.yaml из основной ветки master.