Облачные раннеры 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