База знанийCI/CDРаннерыОблачные раннеры

Облачные раннеры GitVerse

Облачный раннер — это полностью управляемая GitVerse среда выполнения. При запуске workflow GitVerse автоматически выделяет изолированный контейнер на каждую задачу и возвращает результат. Вам не нужно администрировать серверы, обновлять систему или следить за безопасностью окружения.

Что такое облачный раннер

Облачные (GitVerse-hosted) раннеры позволяют выполнять CI/CD задачи без настройки собственных серверов. GitVerse автоматически запускает контейнер на основе latest версии распространяемого нами образа ubuntu, выполняет все шаги workflow и после завершения уничтожает среду, гарантируя чистоту окружения для следующего запуска.

Ключевые особенности облачных раннеров:

  • Ephemeral-среда — каждая задача выполняется в новой среде, состояние между запусками не сохраняется.
  • Безопасность и изоляция — контейнеры не имеют доступа к локальным сетям и ресурсам пользователей.
  • Не требует администрирования — GitVerse сам управляет масштабированием, обновлениями и удалением сред.
  • Технические ограничения — ограничено время на выполнение одной job’ы и временно отсутствует доступ к docker.sock, но есть kaniko.
  • Лимиты — 1000/500 минут сборочного времени в месяц в публичных/приватных репозиториях, подробнее.

Характеристики и рекомендации

ПараметрЗначениеРекомендации
Среда выполненияDocker-контейнер на базе ubuntu-latestИспользуйте для CI, линтинга, юнит-тестов и сборок.
Метка для запускаubuntu-cloud-runnerУкажите в workflow: runs-on: [ubuntu-cloud-runner].
ИзоляцияКаждая задача запускается в отдельной средеНе сохраняйте состояние, кешируйте данные вовне или используйте 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-cloud-runner
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
 
      - name: Build project
        run: make build
 
      - name: Run tests
        run: make test

Сборка образа на облачных раннерах

⚠️
  1. При запуске kaniko меняется файловая система контейнера, пропадают все команды из /usr/bin, и на этом контейнере, больше нельзя запустить какие-либо команды.
  2. Все дополнительные действия необходимо делать в новой задаче.
  3. Если требуется очередность выполнения задач, можно использовать job.<job_id>.needs

Пример: сборка Docker-образа с помощью Kaniko

name: Build with Kaniko
on:
  push:
jobs:
  build_update:
    name: Build
    runs-on: ubuntu-cloud-runner
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Login to Artifact Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ secrets.AR_URI }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
      - name: Kaniko build and push
        run: |
          /kaniko/executor --context=. --dockerfile=./Dockerfile --destination=<dest_project_name>/test_kaniko:0.0.1

Замените <dest_project_name> (строка 18) на имя владельца репозитория.

Пример: сборка и деплой в 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-cloud-runner
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
 
      - name: Log in to Evolution Artifact Registry
        uses: docker/login-action@v2
        with:
          registry: ${{ secrets.EVOAR_URI }}
          username: ${{ secrets.EVOAR_KEYID }}
          password: ${{ secrets.EVOAR_KEYSECRET }}
 
      - name: Kaniko build and push to Evolution Artifact Registry
        run: |
          /kaniko/executor --context=. --dockerfile=./Dockerfile.prod --destination=${{ secrets.EVOAR_URI }}/studio-nextjs-template:latest
  up_container_app:
    name: Up container app
    needs: build_push_image
    runs-on: ubuntu-cloud-runner
    steps:
      - name: setup go
        uses: actions/setup-go@v4
        with:
          go-version: '>=1.23'
      - name: Creating or Updating an Evolution Container App
        uses: user/evo-container-app-action@v5
        with:
          client_id: ${{ secrets.EVOAR_KEYID }}
          client_secret: ${{ secrets.EVOAR_KEYSECRET }}
          registry_uri: ${{ secrets.EVOAR_URI }}
          image_name: studio-nextjs-template
          tag_name: latest
          project_id: ${{ secrets.PROJECT_ID }}
          name: container-app-studio
          port: 3000