Деплой в сloud.ru

Info

В этом разделе рассмотрен деплой приложений в Container Apps (cloud.ru) с использованием GitVerse CI/CD.

Container Apps — это сервис от сloud.ru для запуска контейнерных приложений в облаке.

Подробнее см. в сloud.ru.

В рамках GitVerse CI/CD деплой в Container Apps позволяет автоматизировать процесс развертывания приложений, используя GitVerse-специфичные инструменты и практики.

Пример workflow

Требования

  1. Собранный Docker-образ:

    • ожидается, что образ уже опубликован в реестре;
    • пример: gitverse.ru/actions/gitverse_hello:container_app;
    • можно собрать через: .gitverse/workflows/docker/cloud-hosted-runner/push-registries.yaml.
  2. Доступ к Container App:

    • требуется доступ к реестру cloud.ru;
    • необходимо настроить секреты: CLOUD_RU_REGISTRY, CLOUD_RU_USERNAME, CLOUD_RU_PASSWORD, CLOUD_RU_PROJECT_ID.
  3. Зависимости:

    • используется кастомный action: actions/evo-container-app-action@v5.
  4. Dockerfile:

    • используется: ./distribution/container_app.Dockerfile;
    • приложение должно слушать на одном из разрешенных платформой портов;
    • поддерживаемые порты: 8080, 8443 и т.д. (точный список — в документации cloud.ru);
    • если приложение слушает на порту, не входящем в разрешенный список — оно не будет доступно;
    • пример:
EXPOSE 8080
CMD ["your-app", "--port=8080"]
  1. Container App:

    • проект должен существовать, ID указан в секрете: CLOUD_RU_PROJECT_ID;
    • action автоматически создает или обновляет приложение;
    • название приложения: container-app-gitverse-hello;
    • порт в конфигурации: 8080 (соответствует требованиям платформы).
  2. Как проверить:

Workflow

on:
  workflow_dispatch:
 
jobs:
  # Сборка и публикация образа для container-app
  build-push-image:
    name: Сборка и публикация Docker-образа
    runs-on: ubuntu-latest
 
    steps:
      - name: Клонировать репозиторий
        uses: actions/checkout@v4
 
      - name: Prepare Kaniko credentials
        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
        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

Описание шагов workflow

1. Клонирование репозитория.

  • используется стандартный action actions/checkout@v4 для получения исходного кода проекта.

2. Подготовка учетных данных для Docker реестра.

  • создается конфигурационный файл .docker/config.json с учетными данными для авторизации в реестре cloud.ru;
  • используются секреты CLOUD_RU_REGISTRY, CLOUD_RU_USERNAME, CLOUD_RU_PASSWORD.

3. Сборка и публикация образа через Kaniko.

  • выполняется сборка Docker-образа с помощью Kaniko;
  • образ публикуется в реестре cloud.ru с тегом container_app;
  • используется контекст из директории distribution и Dockerfile distribution/container-app.Dockerfile.

4. Создание или обновление приложения в Container App.

  • используется кастомное действие actions/evo-container-app-action@v1;
  • устанавливается Go версии >=1.23;
  • настраивается подключение к Container App с использованием секретов;
  • создается или обновляется приложение с именем container-app-gitverse-hello на порту 8080;
  • action автоматически обрабатывает создание или обновление ресурса в Container Apps.