В этом руководстве вы настроите CI/CD между Cloud Functions и SourceCraft. Для этого вы создадите репозиторий, настроите развертывание функции и проверите результат. Интеграция между SourceCraft и Yandex Cloud будет выполнена с помощью сервисного подключения.
Важно
Для создания сервисного подключения у вас должна быть рольВладелец организации (organization-manager.organizations.owner).
Чтобы настроить CI/CD для развертывания функции Cloud Functions из репозитория SourceCraft:
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions).
Репозиторий будет создан из шаблона yc-cloud-functions-template. В репозитории будут храниться примеры кода функций для разных языков программирования и фреймворков, а также настройки CI/CD-процесса.
В поле Владелец выберите организацию, в которой вы создали сервисный аккаунт в Yandex Cloud.
В поле Название укажите название репозитория.
Название должно быть уникальным в пределах организации и может содержать следующие ASCII-символы: строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.
Под названием отображается адрес, по которому репозиторий будет доступен.
(опционально) В поле Описание укажите описание репозитория.
В блоке Шаблон репозитория нажмите Просмотр шаблонов, выберите шаблон yc-cloud-functions-template и нажмите Использовать шаблон.
Чтобы посмотреть содержимое шаблона, нажмите Предварительный просмотр.
В шаблоне содержатся:
файл .sourcecraft/ci.yaml с предустановленной конфигурацией CI/CD-процесса, который может быть запущен вручную для публикации функции в конкретной среде выполнения или автоматически для среды выполнения nodejs22 при создании коммита в основную ветку репозитория.
директории с примерами кода функций для разных языков программирования и фреймворков.
Выберите организацию, в которой вы создали сервисный аккаунт в Yandex Cloud.
На странице организации в разделе Настройки перейдите в секцию Сервисные подключения.
Нажмите Новое сервисное подключение.
В открывшемся окне:
В блоке Базовая информация укажите имя сервисного подключения, например default-service-connection, опционально добавьте описание.
В блоке Область применения выберите, для каких репозиториев и веток будет доступно сервисное подключение, например, выберите репозиторий, созданный ранее.
В блоке Настройки Yandex Cloud выберите:
Каталог, на который вы назначили роль сервисному аккаунту.
Сервисный аккаунт, созданный ранее.
Совет
Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите Синхронизировать. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт.
Нажмите Создать сервисное подключение.
Дождитесь окончания операции. На открывшейся странице будут представлены детали сервисного подключения.
YC_FUNCTION_ENTRYPOINT — точка входа функции, например index.handler. Задается в соответствии со средой выполнения согласно документации.
SOURCE_PATH — путь в репозитории к коду функции, например ./nodejs.
Также вы можете добавить дополнительные параметры:
ENVIRONMENT — переменные окружения для функции, например MY_ENV=SOURCECRAFT. Аналог параметра --environment для команды Yandex Cloud CLI yc serverless function version create.
В правом верхнем углу нажмите Сохранить изменения.
Сделайте коммит:
Введите сообщение об изменениях.
В блоке Ветка изменений выберите Сохранить непосредственно в ветку: main.
В блоке Действие после сохранения изменений выберите Просто сохранить.
Нажмите Сохранить изменения.
После сохранения изменений запустится рабочий процесс deploy-nodejs-function.
Аналогичным образом вы можете отредактировать код функции в файле nodejs/index.js. После этого также запустится рабочий процесс публикации новой версии функции.
Совет
В примере рассмотрен автоматический запуск рабочего процесса для среды выполнения nodejs22. Для других сред выполнения используйте ручной запуск или отредактируйте блок on в файле .sourcecraft/ci.yaml.
Для развертывания функции Cloud Functions в конфигурации CI/CD используется готовый кубик SourceCraft yc-function, подходящий для базовых сценариев.
Для более сложных сценариев развертывания функции Cloud Functions со всеми возможностями Yandex Cloud CLI вы можете использовать готовые кубики yc-iam и yc-cli.
Пример конфигурации CI/CD готовыми кубиками yc-iam и yc-cli
on:push:-workflows: [cicd]
filter:branches: ["master", "main"]
tokens:# Произвольное имя токена.<имя_токена>:service_connection:default-service-connection# Область запроса доступа:# org — все репозитории.# repo — конкретный репозиторий.# ref — ветка или тег.scope:repoworkflows:cicd:tasks:-name:deploy-latestenv:SOURCE_PATH:"./nodejs"YC_FUNCTION_NAME:"test-function-nodejs"YC_FUNCTION_RUNTIME:"nodejs22"YC_FUNCTION_ENTRYPOINT:"index.handler"# Кубик обменивает токен SourceCraft на IAM-токен Yandex Cloud# и сохраняет его в переменную IAM_TOKEN в блоке outputs.cubes:-name:get-iam-tokenenv:ID_TOKEN:${{tokens.<имя_токена>.id_token}}YC_SA_ID:${{tokens.<имя_токена>.service_account_id}}image:cr.yandex/sourcecraft/yc-iam:latest# Кубик с предустановленным Yandex Cloud CLI забирает из outputs # переменную IAM_TOKEN и использует ее для проверки наличия функции Cloud Functions# с определенным именем, в случае отсутствия — создает ее.-name:check-and-create-functionenv:# Подставьте в блок для получения значений outputs имя кубика с# IAM-токеном, например get-iam-token.YC_IAM_TOKEN:${{cubes.<имя_кубика_с_IAM-токеном>.outputs.IAM_TOKEN}}YC_FOLDER_ID:${{tokens.<имя_токена>.folder_id}}image:name:cr.yandex/sourcecraft/yc-cli:latestentrypoint:""script:-|
yc config set folder-id $YC_FOLDER_ID
echo "Checking if function exists..."
if ! yc serverless function get --name=$YC_FUNCTION_NAME; then
echo "Function does not exist. Creating new function..."
yc serverless function create --name=$YC_FUNCTION_NAME
else
echo "Function already exists. Proceeding to version deployment..."
fi
# Кубик с предустановленным Yandex Cloud CLI забирает из outputs # переменную IAM_TOKEN и использует ее для создания новой версии функции Cloud Functions.-name:deploy-function-versionenv:# Подставьте в блок для получения значений outputs имя кубика с# IAM-токеном, например get-iam-token.YC_IAM_TOKEN:${{cubes.<имя_кубика_с_IAM-токеном>.outputs.IAM_TOKEN}}YC_FOLDER_ID:${{tokens.<имя_токена>.folder_id}}image:name:cr.yandex/sourcecraft/yc-cli:latestentrypoint:""script:-mkdir-p./tmp-cp"$SOURCE_PATH"/*.js*./tmp-echo"Deploying new function version..."-|
yc config set folder-id $YC_FOLDER_ID
yc serverless function version create \
--function-name=$YC_FUNCTION_NAME \
--runtime $YC_FUNCTION_RUNTIME \
--entrypoint $YC_FUNCTION_ENTRYPOINT \
--execution-timeout 5s \
--source-path ./tmp
На вкладке Домой в секции Ваша мастерская перейдите в раздел Репозитории.
Выберите созданный ранее репозиторий.
На странице репозитория в разделе Код перейдите в секцию Автоматизации.
В списке запусков автоматизаций вы увидите новый запуск со статусом В очереди. Дождитесь, когда статус изменится на Успех.
Проверьте, что функция создалась
Убедитесь, что в сервисе Cloud Functions создалась функция с именем, которое вы задали в .sourcecraft/ci.yaml, например test-function-nodejs.
Консоль управления
CLI
API
В консоли управления перейдите в каталог, в котором вы ранее создали сервисный аккаунт.
В списке сервисов выберите Cloud Functions.
В списке должна появиться функция test-function-nodejs, выберите ее.
В разделе История версий должна появиться версия функции, по времени создания соответствующая времени запуска CI/CD-процесса.
Перейдите на вкладку Редактор.
В редакторе кода в файле index.js должен отобразиться код:
// Example Node.js function handlerexportconst handler = asyncfunction (event, context) {
// Log the incoming event for debuggingconsole.log('Received event:', event);
// Access request body (if it's a POST request)const requestBody = event.body ? JSON.parse(event.body) : {};
// Access query parametersconst name = event.queryStringParameters ? event.queryStringParameters.name : 'World';
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: `Hello, ${name}! Your request body was:`,
data: requestBody,
}),
};
};
Получите список функций в каталоге, указанном в файле .sourcecraft/ci.yaml:
yc serverless function list
Результат:
+----------------------+----------------------+----------------------+--------+
| ID | NAME | FOLDER ID | STATUS |
+----------------------+----------------------+----------------------+--------+
| b097d9ous3ge******** | test-function-nodejs | aoek49ghmknn******** | ACTIVE |
+----------------------+----------------------+----------------------+--------+
В выводе команды должна отобразиться функция test-function-nodejs.
Получите список версий функции test-function-nodejs:
yc serverless function version list --function-id <идентификатор_функции>
Результат:
+----------------------+----------------------+----------+---------------+---------+---------------------+
| ID | FUNCTION ID | RUNTIME | ENTRYPOINT | TAGS | CREATED AT |
+----------------------+----------------------+----------+---------------+---------+---------------------+
| b097d9ousd36******** | b097d9ous3ge******** | nodejs22 | index.handler | $latest | 2025-05-28 05:05:12 |
+----------------------+----------------------+----------+---------------+---------+---------------------+
В выводе команды должна отобразиться версия функции, по времени создания соответствующая времени запуска CI/CD-процесса.
Чтобы получить список функций, воспользуйтесь методом REST API list для ресурса Function или вызовом gRPC API FunctionsService/List.
В списке должна отобразиться функция test-function-nodejs.