Настройка CI/CD в SourceCraft для развертывания приложения в Yandex Serverless Containers с помощью GitHub Actions
В этом практическом руководстве вы настроите CI/CD-процесс
Важно
Для создания сервисного подключения у вас должна быть рольВладелец организации (organization-manager.organizations.owner).
Чтобы настроить CI/CD для развертывания приложения в Serverless Containers из репозитория SourceCraft с помощью GitHub Actions:
- Создайте сервисный аккаунт.
- Создайте реестр.
- Создайте репозиторий.
- Создайте сервисное подключение.
- Настройте CI/CD.
- Проверьте выполнение CI/CD.
- Проверьте, что контейнер создан.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- Плата за хранение созданных Docker-образов (см. тарифы Container Registry.
- Плата за количество вызовов контейнера, вычислительные ресурсы, выделенные для выполнения приложения, и исходящий трафик (см. тарифы Serverless Containers.
Создайте сервисный аккаунт
От имени сервисного аккаунта будут загружаться Docker-образы в реестры Yandex Container Registry и развертываться контейнеры в Serverless Containers.
-
Войдите в консоль управления
Yandex Cloud. -
В левой части экрана нажмите на строку с именем каталога, в котором вы хотите развернуть контейнер.
-
В списке сервисов выберите Identity and Access Management.
-
Нажмите Создать сервисный аккаунт.
-
В поле Имя укажите
github-action. -
Нажмите
Добавить роль и выберите роли:container-registry.images.pusher— для работы с Docker-образами в реестре;serverless-containers.editor— для управления контейнером;iam.serviceAccounts.user— для возможности при создании ревизии контейнера указать сервисный аккаунт, от имени которого Docker-образ будет загружен из реестра.
-
Нажмите Создать.
-
Создайте сервисный аккаунт:
yc iam service-account create \ --name github-action --folder-name <имя_каталога>Результат:
id: ajeab0cnib1p******** folder_id: b0g12ga82bcv******** created_at: "2025-10-03T09:44:35.989446Z" name: github-action -
Назначьте сервисному аккаунту роли на каталог:
-
iam.serviceAccounts.user— для возможности при создании ревизии контейнера указать сервисный аккаунт, от имени которого Docker-образ будет загружен из реестра:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name github-action \ --role iam.serviceAccounts.user \ --folder-name <имя_каталога> -
serverless-containers.editor— для управления контейнером:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name github-action \ --role serverless-containers.editor \ --folder-name <имя_каталога> -
container-registry.images.pusher— для работы с Docker-образами в реестре:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name github-action \ --role container-registry.images.pusher \ --folder-name <имя_каталога>
-
-
Создайте сервисный аккаунт
github-action. Для этого воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create. -
Назначьте сервисному аккаунту в текущем каталоге роли:
iam.serviceAccounts.user— для возможности при создании ревизии контейнера указать сервисный аккаунт, от имени которого Docker-образ будет загружен из реестра;serverless-containers.editor— для управления контейнером;container-registry.images.pusher— для работы с Docker-образами в реестре.
Для этого воспользуйтесь методом REST API setAccessBindings для ресурса Folder или вызовом gRPC API FolderService/SetAccessBindings.
Создайте реестр
В реестре Container Registry будет храниться Docker-образ приложения.
- В консоли управления
выберите Container Registry. - Нажмите Создать реестр.
- Задайте имя реестра
github-action. - Нажмите Создать реестр.
- Сохраните идентификатор созданного реестра, он понадобится в дальнейшем.
Создайте реестр github-action:
yc container registry create --name github-action
Результат:
id: crpd50616s9a********
folder_id: b1g88tflru0e********
name: github-action
status: ACTIVE
created_at: "2025-10-03T10:34:06.601Z"
Сохраните идентификатор созданного реестра, он понадобится в дальнейшем.
Воспользуйтесь методом REST API create для ресурса Registry или вызовом gRPC API RegistryService/CreateRegistryRequest.
Сохраните идентификатор созданного реестра, он понадобится в дальнейшем.
Создайте репозиторий
Репозиторий будет создан из шаблона yc-ci-cd-serverlessDockerfile и вспомогательные файлы для создания Docker-образа, а также настройки CI/CD-процесса.
-
Откройте главную страницу сервиса
. -
На панели слева нажмите
Создать репозиторий. -
В открывшемся окне выберите Пустой репозиторий.
-
В блоке Сведения о новом репозитории:
-
В поле Владелец выберите организацию
, в которой вы создали сервисный аккаунт в Yandex Cloud. -
В поле Название укажите название репозитория.
Название должно быть уникальным в пределах организации и может содержать следующие ASCII-символы
: строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.Под названием отображается адрес, по которому репозиторий будет доступен.
-
(опционально) В поле Описание укажите описание репозитория.
-
-
В блоке Шаблон репозитория нажмите Просмотр шаблонов, выберите шаблон yc-ci-cd-serverless
и нажмите Использовать шаблон.Чтобы посмотреть содержимое шаблона, нажмите Предварительный просмотр.
В шаблоне содержатся:
- файл .sourcecraft/ci.yaml
с предустановленной конфигурацией CI/CD-процесса, который запускается при создании коммита и выполняет следующее:- Получает IAM-токен Yandex Cloud с помощью сервисного подключения с именем
default-service-connection. - Устанавливает в окружение воркера
утилиту Docker Buildx с помощью GitHub Action Docker Setup Buildx . - Аутентифицируется в Container Registry с помощью GitHub Action Docker Login
и IAM-токена Yandex Cloud. - Собирает Docker-образ из
Dockerfile, размещенного в корне репозитория, и отправляет образ в Container Registry с помощью GitHub Action Build and push Docker images . - Разворачивает контейнер в Serverless Containers из собранного Docker-образа.
- Получает IAM-токен Yandex Cloud с помощью сервисного подключения с именем
- файлы Dockerfile
, index.html и docker/nginx/conf.d/default.conf с конфигурацией контейнера со статическим веб‑приложением на базе Nginx .
- файл .sourcecraft/ci.yaml
-
Нажмите Создать репозиторий.
Создайте сервисное подключение
-
Откройте главную страницу
SourceCraft. -
Перейдите на вкладку
Организации. -
Выберите организацию, в которой вы создали сервисный аккаунт в Yandex Cloud.
-
На странице организации в разделе
Настройки перейдите в секцию Сервисные подключения. -
Нажмите Новое сервисное подключение.
-
В блоке Базовая информация укажите имя сервисного подключения
default-service-connection. -
В блоке Область применения выберите созданный ранее репозиторий.
-
В блоке Настройки Yandex Cloud выберите:
-
Каталог, в котором ранее вы развернули облачную инфраструктуру и назначили роль сервисному аккаунту.
-
Сервисный аккаунт
github-action.Совет
Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите
Синхронизировать. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт.
-
-
Нажмите Создать сервисное подключение.
Дождитесь окончания операции. На открывшейся странице будут представлены детали сервисного подключения.
В Yandex Cloud будет автоматически создана федерация сервисных аккаунтов Yandex Identity and Access Management.
Чтобы посмотреть параметры созданного OIDC-провайдера, в блоке
Федерация cервисных аккаунтов нажмите на имя федерации.
Настройте CI/CD
-
Откройте главную страницу
SourceCraft. -
На вкладке
Домой в секции Ваша мастерская перейдите в раздел Репозитории. -
Выберите созданный ранее репозиторий.
-
Выберите файл
.sourcecraft/ci.yaml. -
В правом верхнем углу нажмите
Редактировать. -
В параметре
YC_DOCKER_REGISTRY_URIукажите идентификатор созданного ранее реестра:YC_DOCKER_REGISTRY_URI: cr.yandex/<идентификатор_реестра> -
В правом верхнем углу нажмите Сохранить изменения.
-
Сделайте коммит:
- Введите сообщение об изменениях.
- В блоке Ветка изменений выберите Сохранить непосредственно в ветку: main.
- В блоке Действие после сохранения изменений выберите Просто сохранить.
- Нажмите Сохранить изменения.
После сохранения изменений запустится рабочий процесс demo-service-connection-workflow.
Проверьте выполнение CI/CD
- Откройте главную страницу
SourceCraft. - На вкладке
Домой в секции Ваша мастерская перейдите в раздел Репозитории. - Выберите созданный ранее репозиторий.
- На странице репозитория в разделе
Код перейдите в секцию Автоматизации. - В списке запусков автоматизаций вы увидите новый запуск. Дождитесь, когда статус изменится на
Успех.
Проверьте, что контейнер создан
-
В консоли управления
выберите сервис Serverless Containers. -
В списке должен появиться контейнер
demo-serverless-container1, выберите его.В блоке Ревизии должна появиться ревизия контейнера, по времени создания соответствующая времени запуска CI/CD-процесса.
Выполните команду:
yc serverless container revision list \
--container-name demo-serverless-container1
Где --container-name — имя контейнера, указанное в .sourcecraft/ci.yaml.
Результат:
+----------------------+----------------------+--------------------------------------------------------+---------------------+
| ID | CONTAINER ID | IMAGE | CREATED AT |
+----------------------+----------------------+--------------------------------------------------------+---------------------+
| bba27hejd69a******** | bba83i1mrb5s******** | cr.yandex/yc/serverless/demo-serverless-container1 | 2025-10-04 09:38:14 |
+----------------------+----------------------+--------------------------------------------------------+---------------------+
Воспользуйтесь методом REST API listRevisions для ресурса Container или вызовом gRPC API RegistryService/CreateRegistryRequest.
Удалите созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
См. также
- Настроить CI/CD между SourceCraft и Yandex Cloud Functions
- Настроить в SourceCraft сервисное подключение к Yandex Cloud
- Интеграция с GitHub Actions в SourceCraft
- Репозиторий serverless-functions
в SourceCraft - Репозиторий yc-ci-cd-serverless
в SourceCraft