Деплой в сloud.ru
Info
В этом разделе рассмотрен деплой приложений в Container Apps (cloud.ru) с использованием GitVerse CI/CD.
Container Apps — это сервис от сloud.ru для запуска контейнерных приложений в облаке.
Подробнее см. в сloud.ru.
В рамках GitVerse CI/CD деплой в Container Apps позволяет автоматизировать процесс развертывания приложений, используя GitVerse-специфичные инструменты и практики.
Пример workflow
Требования
-
Собранный Docker-образ:
- ожидается, что образ уже опубликован в реестре;
- пример:
gitverse.ru/actions/gitverse_hello:container_app; - можно собрать через:
.gitverse/workflows/docker/cloud-hosted-runner/push-registries.yaml.
-
Доступ к Container App:
- требуется доступ к реестру cloud.ru;
- необходимо настроить секреты:
CLOUD_RU_REGISTRY,CLOUD_RU_USERNAME,CLOUD_RU_PASSWORD,CLOUD_RU_PROJECT_ID.
-
Зависимости:
- используется кастомный action:
actions/evo-container-app-action@v5.
- используется кастомный action:
-
Dockerfile:
- используется:
./distribution/container_app.Dockerfile; - приложение должно слушать на одном из разрешенных платформой портов;
- поддерживаемые порты: 8080, 8443 и т.д. (точный список — в документации cloud.ru);
- если приложение слушает на порту, не входящем в разрешенный список — оно не будет доступно;
- пример:
- используется:
EXPOSE 8080
CMD ["your-app", "--port=8080"]-
Container App:
- проект должен существовать, ID указан в секрете:
CLOUD_RU_PROJECT_ID; - action автоматически создает или обновляет приложение;
- название приложения:
container-app-gitverse-hello; - порт в конфигурации: 8080 (соответствует требованиям платформы).
- проект должен существовать, ID указан в секрете:
-
Как проверить:
- после успешного деплоя откройте в браузере: https://container-app-gitverse-hello.containerapps.ru;
- вы увидите ответ от запущенного приложения.
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и Dockerfiledistribution/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.