В этом руководстве вы настроите CI/CD между Cloud Functions и SourceCraft. Для этого вы создадите репозиторий, настроите развертывание функции и проверите результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions).
Создайте сервисный аккаунт и авторизованный ключ
От имени сервисного аккаунта SourceCraft будет создавать функцию и ее версии.
Создайте сервисный аккаунт
Консоль управления
CLI
API
В консоли управления в списке сервисов выберите Identity and Access Management.
Нажмите Создать сервисный аккаунт.
Введите имя сервисного аккаунта: functions-cicd-sa.
Нажмите Добавить роль и выберите рольfunctions.admin.
Нажмите Создать.
Создайте сервисный аккаунт с именем functions-cicd-sa:
yc iam service-account create --name functions-cicd-sa
В консоли управления в списке сервисов выберите Identity and Access Management.
Выберите сервисный аккаунт functions-cicd-sa.
На верхней панели нажмите Создать новый ключ и выберите пункт Создать авторизованный ключ.
Выберите алгоритм шифрования.
Нажмите Создать.
Нажмите Скачать файл с ключами. Убедитесь, что файл сохранился на компьютере. Его содержимое понадобится при создании секрета. Открытый ключ нельзя будет посмотреть в консоли управления.
Выполните команду:
yc iam key create --service-account-name sa-function -o functions-cicd-sa_key_file.json
В случае успеха в файл functions-cicd-sa_key_file.json будут записаны данные авторизованного ключа. Например:
{"id":"ajek6nubd5g3********","service_account_id":"ajelprpohp7r********","created_at":"2025-05-28T16:17:17.721526532Z","key_algorithm":"RSA_2048","public_key":"-----BEGIN PUBLIC KEY-----\nMI...QAB\n-----END PUBLIC KEY-----\n","private_key":"PLEASE DO NOT REMOVE THIS LINE! Yandex.Cloud SA Key ID \u003cajek6nubd5g3********\u003e\n-----BEGIN PRIVATE KEY-----\nMI...WdQ=\n-----END PRIVATE KEY-----\n"}
Чтобы создать авторизованный ключ доступа, воспользуйтесь методом REST API create для ресурса Key или вызовом gRPC API Key/Create.
Создайте репозиторий
В репозитории будут храниться параметры и код функции, а также настройки CI/CD-процесса.
В поле Владелец выберите организацию, в которой будет создан репозиторий.
В поле Название укажите название репозитория.
Название должно быть уникальным в пределах организации и может содержать следующие ASCII-символы: строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.
Под названием отображается адрес, по которому репозиторий будет доступен.
(опционально) В поле Описание укажите описание репозитория.
Нажмите Создать репозиторий.
Создайте секрет в репозитории
В секрете в зашифрованном виде будет храниться авторизованный ключ сервисного аккаунта для доступа к функции.
Аналогичным образом создайте файл .sourcecraft/ci.yaml. Вставьте в него следующий код, указав идентификатор каталога, в котором хотите создать функцию:
on:push:-workflows:cicdfilter:branches: [ main ]
workflows:cicd:tasks:-name:deploy-latestenv:TMP_PATH:./tmpYC_AUTHORIZED_KEY_JSON:${{secrets.<название_секрета>}}YC_FOLDER_ID:<идентификатор_каталога>YC_FUNCTION_NAME:cicd-testYC_FUNCTION_RUNTIME:nodejs22YC_FUNCTION_ENTRYPOINT:index.handlerYC_FUNCTION_MEMORY:128mcubes:-name:install-and-configure-ycscript:-curl-o./yc-install.sh-Lhttps://storage.yandexcloud.net/yandexcloud-yc/install.sh-chmod+x./yc-install.sh&&./yc-install.sh-i/tmp/yc-n&&mv/tmp/yc/bin/yc/usr/bin/yc-echo"$YC_AUTHORIZED_KEY_JSON">key.json-ycconfigprofilecreatesa-profile-ycconfigsetservice-account-keykey.json-ycconfigsetformatjson-ycconfigsetfolder-id$YC_FOLDER_ID-name:check-and-create-functionscript:-|
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
-name:deploy-function-versionscript:-mkdir-p$TMP_PATH-cp./*.js*$TMP_PATH-echo"Deploying new function version..."-|
yc serverless function version create \
--function-name=$YC_FUNCTION_NAME \
--runtime $YC_FUNCTION_RUNTIME \
--entrypoint $YC_FUNCTION_ENTRYPOINT \
--memory $YC_FUNCTION_MEMORY \
--execution-timeout 5s \
--source-path $TMP_PATH
Где:
YC_FOLDER_ID — идентификатор каталога, в котором вы хотите создать функцию.
YC_FUNCTION_NAME — имя функции.
YC_FUNCTION_RUNTIME — среда выполнения.
YC_FUNCTION_ENTRYPOINT — точка входа.
YC_FUNCTION_MEMORY — объем RAM.
В правом верхнем углу нажмите Сохранить изменения.
Сделайте коммит:
Введите сообщение об изменениях.
В блоке Ветка изменений выберите Сохранить непосредственно в ветку: main.
В блоке Действие после сохранения изменений выберите Просто сохранить.
Получите список функций в каталоге, указанном в файле .sourcecraft/ci.yaml:
yc serverless function list
Результат:
+----------------------+-----------+----------------------+--------+
| ID | NAME | FOLDER ID | STATUS |
+----------------------+-----------+----------------------+--------+
| b097d9ous3ge******** | cicd-test | aoek49ghmknn******** | ACTIVE |
+----------------------+-----------+----------------------+--------+
В выводе команды должна отобразиться функция cicd-test.
Получите список версий функции cicd-test:
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.