Настройка CI/CD с Yandex Cloud Functions
SourceCraft дает возможность хранить код функции Yandex Cloud Functions и развертывать новые версии функции при изменениях в репозитории.
В этом руководстве вы настроите CI/CD между Cloud Functions и SourceCraft. Для этого вы создадите репозиторий, настроите развертывание функции и проверите результат.
Чтобы настроить CI/CD:
- Создайте сервисный аккаунт и авторизованный ключ.
- Создайте репозиторий.
- Создайте секрет в репозитории.
- Внесите изменения в репозиторий.
- Проверьте CI/CD-процесс.
- Проверьте изменения в функции.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions).
Создайте сервисный аккаунт и авторизованный ключ
От имени сервисного аккаунта SourceCraft будет создавать функцию и ее версии.
Создайте сервисный аккаунт
- В консоли управления в списке сервисов выберите Identity and Access Management.
- Нажмите Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
functions-cicd-sa. - Нажмите Добавить роль и выберите роль
functions.admin. - Нажмите Создать.
-
Создайте сервисный аккаунт с именем
functions-cicd-sa:yc iam service-account create --name functions-cicd-saРезультат:
id: ajehb3tcdfa1******** folder_id: b1g86q4m5vej******** created_at: "2025-05-28T16:05:14.237381531Z" name: functions-cicd-sa -
Назначьте сервисному аккаунту роль
functions.adminна каталог:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role functions.admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Результат:
done (3s) effective_deltas: - action: ADD access_binding: role_id: functions.admin subject: id: ajehb3tcdfa1******** type: serviceAccount
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль functions.admin на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Создайте авторизованный ключ
- В консоли управления в списке сервисов выберите 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-процесса.
- Откройте главную страницу SourceCraft.
- На панели слева нажмите Создать репозиторий.
- В открывшемся окне выберите Создать пустой репозиторий.
-
В блоке Сведения о новом репозитории:
-
В поле Владелец выберите организацию, в которой будет создан репозиторий.
-
В поле Название укажите название репозитория.
Название должно быть уникальным в пределах организации и может содержать следующие ASCII-символы: строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.
Под названием отображается адрес, по которому репозиторий будет доступен.
-
(опционально) В поле Описание укажите описание репозитория.
-
- Нажмите Создать репозиторий.
Создайте секрет в репозитории
В секрете в зашифрованном виде будет храниться авторизованный ключ сервисного аккаунта для доступа к функции.
-
Откройте главную страницу SourceCraft.
-
На вкладке Домой перейдите в раздел Репозитории.
-
Выберите созданный ранее репозиторий.
-
На странице репозитория в разделе Настройки репозитория перейдите в секцию Секреты.
-
На странице с секретами нажмите Новый секрет.
-
В открывшемся окне:
- В поле Название введите название секрета —
authorized-key. - В поле Секрет вставьте содержимое файла с авторизованным ключом, сохраненное ранее.
- В поле Название введите название секрета —
-
Нажмите Добавить секрет.
Внесите изменения в репозиторий
Создайте в репозитории следующие файлы:
index.jsс кодом функции;.sourcecraft/ci.yamlс параметрами функции и настройками CI/CD-процесса.
-
Откройте главную страницу SourceCraft.
-
На вкладке Домой перейдите в раздел Репозитории.
-
Выберите созданный ранее репозиторий.
-
Нажмите Просмотр всех файлов репозитория.
-
Справа от имени ветки нажмите → Файл.
-
Введите название файла
index.jsи нажмите Создать файл. -
Вставьте в файл
index.jsследующий код:module.exports.handler = async function (event, context) { return { statusCode: 200, body: 'Hello from SourceCraft!', }; }; -
Аналогичным образом создайте файл
.sourcecraft/ci.yaml. Вставьте в него следующий код, указав идентификатор каталога, в котором хотите создать функцию:on: push: - workflows: cicd filter: branches: [ main ] workflows: cicd: tasks: - name: deploy-latest env: TMP_PATH: ./tmp YC_AUTHORIZED_KEY_JSON: ${{ secrets.authorized-key }} YC_FOLDER_ID: <идентификатор_каталога> YC_FUNCTION_NAME: cicd-test YC_FUNCTION_RUNTIME: nodejs22 YC_FUNCTION_ENTRYPOINT: index.handler YC_FUNCTION_MEMORY: 128m cubes: - name: install-and-configure-yc script: - curl -o ./yc-install.sh -L https://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 - yc config profile create sa-profile - yc config set service-account-key key.json - yc config set format json - yc config set folder-id $YC_FOLDER_ID - name: check-and-create-function script: - | 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-version script: - 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.
- В блоке Действие после сохранения изменений выберите Просто сохранить.
- Нажмите Сохранить и вернуться в режим чтения.
Проверьте CI/CD-процесс
Убедитесь, что CI/CD-процесс прошел успешно.
- Откройте главную страницу SourceCraft.
- На вкладке Домой перейдите в раздел Репозитории.
- Выберите созданный ранее репозиторий.
- На странице репозитория в разделе Код перейдите в секцию Автоматизации.
- В списке запусков автоматизаций вы увидите новый запуск со статусом В очереди. Дождитесь, когда статус изменится на Успех.
Проверьте, что функция создалась
Убедитесь, что в сервисе Cloud Functions создалась функция с именем cicd-test.
-
В консоли управления перейдите в каталог, который указали в файле
.sourcecraft/ci.yaml. -
В списке сервисов выберите Cloud Functions.
-
В списке должна появиться функция
cicd-test, выберите ее. -
В разделе История версий должна появиться версия функции, по времени создания соответствующая времени запуска CI/CD-процесса.
-
Перейдите на вкладку Редактор.
-
В редакторе кода в файле
index.jsдолжен отобразиться код:module.exports.handler = async function (event, context) { return { statusCode: 200, body: 'Hello from SourceCraft!', }; };
-
Получите список функций в каталоге, указанном в файле
.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.
В списке должна отобразиться функция cicd-test.
Чтобы получить список версий функции, воспользуйтесь методом REST API listVersions для ресурса Function или вызовом gRPC API FunctionsService/ListVersions.
В списке должна появиться новая версия функции, по времени создания соответствующая времени запуска CI/CD-процесса.
Удалите созданные ресурсы
Если созданные ресурсы вам больше не нужны, удалите их: