Облачные раннеры GitVerse
Info
Облачный раннер — это полностью управляемая GitVerse среда выполнения. При запуске workflow GitVerse автоматически выделяет изолированный контейнер на каждую задачу и возвращает результат. Вам не нужно администрировать серверы, обновлять систему или следить за безопасностью окружения.
Что такое облачный раннер
Облачные (GitVerse-hosted) раннеры позволяют выполнять CI/CD задачи без настройки собственных серверов.
GitVerse автоматически запускает контейнер на основе latest версии распространяемого нами образа
ubuntu,
выполняет все шаги workflow и после завершения уничтожает среду, гарантируя чистоту окружения для следующего запуска.
Ключевые особенности облачных раннеров:
- ephemeral-среда — каждая задача выполняется в новой среде, состояние между запусками не сохраняется;
- безопасность и изоляция — контейнеры не имеют доступа к локальным сетям и ресурсам пользователей;
- не требует администрирования — GitVerse сам управляет масштабированием, обновлениями и удалением сред;
- технические ограничения — ограничено время на выполнение одной job’ы и временно отсутствует доступ к
docker.sock, но есть kaniko; - лимиты — 1000/500 минут сборочного времени в месяц в публичных/приватных репозиториях, подробнее.
Характеристики и рекомендации
| Параметр | Значение | Рекомендации |
|---|---|---|
| Среда выполнения | Docker-контейнер на базе ubuntu-latest | Используйте для CI, линтинга, юнит-тестов и сборок. |
| Метка для запуска | ubuntu-latest | Укажите в workflow: runs-on: [ubuntu-latest]. |
| Изоляция | Каждая задача запускается в отдельной среде | Не сохраняйте состояние, кешируйте данные вовне или используйте actions/upload-artifact. |
Доступ к docker.sock | Отсутствует (временно) | Для запуска чего-то в Docker используйте self-hosted раннеры. |
| Сетевые ограничения | Нет доступа к локальным VLAN, SMB/NFS и устройствам | Для интеграционных тестов применяйте локальные раннеры. |
| Таймауты | Временной лимит на выполнение одной job’ы | Что-то «тяжелое» лучше запускать на self-hosted. |
| Масштабирование | Автоматическое, управляется GitVerse | Идеально подходит для распределенных CI-нагрузок. |
Примеры использования
Запуск задачи на облачном раннере
name: Build and Test
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Build project
run: make build
- name: Run tests
run: make testСборка docker образов на облачных раннерах
В настоящее время docker.sock на облачных раннерах недоступен.
Для сборки docker образов можно использовать kaniko.
Пример работы с kaniko — сборка и деплой приложения в Container Apps от Cloud.ru :
name: Build with Kaniko and Deploy App to cloud.ru
on:
push:
jobs:
build_push_image:
name: Build and push to Evolution Artifact Registry
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
# создается конфигурационный файл .docker/config.json с учетными данными для авторизации в реестре cloud.ru;
# используются секреты CLOUD_RU_REGISTRY, CLOUD_RU_USERNAME, CLOUD_RU_PASSWORD
- name: Prepare Kaniko credentials for cloud.ru
run: |
mkdir -p "${{ gitverse.workspace }}/.docker"
# Кодируем username:password в base64
AUTH=$(echo -n "${{ secrets.CLOUD_RU_USERNAME }}:${{ secrets.CLOUD_RU_PASSWORD }}" | base64 -w0)
# Создаем config.json с credentials
cat > "${{ gitverse.workspace }}/.docker/config.json" <<EOF
{
"auths": {
"${{ secrets.CLOUD_RU_REGISTRY }}": {
"auth": "${AUTH}"
}
}
}
EOF
chmod 600 "${{ gitverse.workspace }}/.docker/config.json"
echo "✅ Created config at ${{ gitverse.workspace }}/.docker/config.json"
shell: bash
- name: Kaniko build and push to Evolution Artifact Registry
uses: docker://gcr.io/kaniko-project/executor:v1.24.0
env:
DOCKER_CONFIG: ${{ gitverse.workspace }}/.docker
with:
args: >-
--context=dir://${{ gitverse.workspace }}/distribution
--dockerfile=container-app.Dockerfile
--destination=${{ secrets.CLOUD_RU_REGISTRY }}/gitverse_hello:container_app
--verbosity=info
# Деплой в Container App
up-container-app:
name: Деплой в Container App
needs: build-push-image
runs-on: ubuntu-latest
steps:
- name: Создать или обновить приложение в Container App
uses: actions/evo-container-app-action@v1
with:
client_id: ${{ secrets.CLOUD_RU_USERNAME }}
client_secret: ${{ secrets.CLOUD_RU_PASSWORD }}
registry_uri: ${{ secrets.CLOUD_RU_REGISTRY }}
image_name: gitverse_hello
tag_name: container_app
project_id: ${{ secrets.CLOUD_RU_PROJECT_ID }}
name: container-app-gitverse-hello
port: 8080