Облачная платформаEvolution

Использование DevServices CLI для работы с Repo и публикации приложения с помощью Workflow Studio


С помощью этого руководства вы создадите через DevServices CLI git-репозиторий в Repo, отправите в него файлы с кодом приложения, создадите приложение в Workflow Studio и опубликуете его.

Вы будете использовать следующие сервисы:

  • Workflow Studio — сервис, который связывает репозиторий и выбранную ветку с пайплайном деплоя и запускает публикацию.

  • Repo — сервис для хранения кода и совместной разработки.

  • DevServices CLI — инструмент командной строки для работы с Workflow Studio, Repo и другими сервисами Cloud.ru, а также AI-агентами.

    Команды CLI спроектированы для безопасного использования в автоматизации и AI-агентах: предусмотрен стабильный вывод в формате --json и передача секретов через переменные окружения.

Repo и Workflow Studio — независимые сервисы, но для аутентификации достаточно использовать один и тот же API-ключ EDS_API_KEY через X-API-KEY.

Команда eds repo clone встраивает API-ключ как учетные данные HTTP Basic Auth в smart-HTTP URL, который передает его в git clone . Поэтому clone и push работают автономно — не нужно заранее настраивать git credential helper , связку ключей операционной системы или ~/.netrc. Это важно для CI и песочниц AI-агентов, в которых обычно нет ничего из перечисленного.

Шаги:

  1. Установите DevServices CLI.

  2. Настройте доступ к API.

  3. Создайте репозиторий в Repo и клонируйте его.

  4. Добавьте файлы с кодом приложения и Dockerfile и отправьте их в репозиторий.

  5. Создайте и опубликуйте приложение в Workflow Studio.

  6. Проверьте статус публикации.

  7. Получите URL приложения.

  8. При возникновении ошибок выясните их причину.

  9. После изменения кода опубликуйте приложение повторно.

Рекомендованная операционная система для выполнения шагов практического руководства — Linux или macOS.

Перед началом работы

  1. Зарегистрируйтесь в личном кабинете Cloud.ru.

    Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Проверьте, что ваша роль — «Администратор проекта» или выше. Она нужна, чтобы создавать API-ключи и управлять ими.

  3. Создайте API-ключ и сохраните его, он понадобится позже. Для Repo и Workflow Studio используется один ключ.

  4. Подключите Workflow Studio, если еще сервис не подключен:

    1. В личном кабинете нажмите Кнопка с изображением девяти точек и выберите Разработка → Workflow Studio.

    2. В окне Подключение сервиса Workflow Studio нажмите Подключить.

  5. Получите идентификатор проекта.

  6. Установите Git с официального сайта.

1. Установите DevServices CLI

Для установки DevServices CLI рекомендуется использовать установщик из GitHub Release.

Чтобы установить DevServices CLI из GitHub Release, выполните команду:

curl -fsSL https://raw.githubusercontent.com/cloud-ru/evolution-devservices-cli/main/scripts/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
eds version

Установщик определяет операционную систему, скачивает подходящий бинарный файл из последнего GitHub Release, помещает его в ~/.local/bin/eds и проверяет установку.

Альтернативный способ установки:

  1. Скачайте бинарный файл со страницы релизов. Выберите eds-<os>-<arch> для своей платформы, например eds-darwin-arm64 или eds-linux-amd64:

    curl -fsSL -o eds \
    https://github.com/cloud-ru/evolution-devservices-cli/releases/latest/download/eds-darwin-arm64
    chmod +x eds && sudo mv eds /usr/local/bin/eds
  2. Чтобы собрать CLI из исходного кода, последовательно выполните команды:

    git clone git@github.com:cloud-ru/evolution-devservices-cli.git
    cd evolution-devservices-cli
    go install github.com/cloud-ru/evolution-devservices-cli@latest

    Или:

    make build # ./bin/eds
    make build-all # darwin/linux x amd64/arm64 в ./dist/

2. Настройте доступ к API

  1. Задайте переменные окружения:

    export EDS_API_KEY="<api_key>"
    export EDS_PROJECT_ID="<project_id>"

    Где:

    • <api_key> — API-ключ, созданный перед началом работы.

    • <project_id> — идентификатор проекта, полученный перед началом работы.

    Чтобы сохранить учетные данные один раз и передавать их в заголовке X-API-KEY в каждом запросе, выполните команду:

    eds login --api-key "$EDS_API_KEY" --project <project_id>

    Где <project_id> — идентификатор проекта.

  2. Чтобы работать с dev-окружением Repo, укажите его URL API c помощью опции --repo-api-url или переменной EDS_REPO_API_URL:

    export EDS_REPO_API_URL=https://devtools.dev.api.internal.cloud.ru/repo/api/v1
  3. Проверьте действующую конфигурацию и корректность идентификатора проекта:

    eds config

3. Создайте репозиторий и клонируйте его

  1. Чтобы создать репозиторий в Repo, выполните команду:

    eds repo create my-site

    При создании репозитория можно указать описание и видимость private или shadow. Для этого вместо eds repo create my-site выполните команду:

    eds repo create my-site --description "<your__description>" --visibility private
  2. Чтобы клонировать репозиторий, выполните команду:

    eds repo clone my-site

    Команда eds repo clone по умолчанию клонирует репозиторий по HTTPS и записывает API-ключ в открытом виде в .git/config. Обращайтесь с каталогом клона так же осторожно, как и с самим ключом.

    Чтобы клонировать по SSH, добавьте опцию --ssh. Для этого SSH-ключ хоста нужно зарегистрировать отдельно, CLI этого не делает.

  3. Перейдите в каталог my-site:

    cd my-site

4. Добавьте файлы с кодом приложения и Dockerfile и отправьте их в репозиторий

  1. В каталоге my-site создайте файл index.html и сохраните следующий код:

    <!DOCTYPE html>
    <html lang="ru">
    <head>
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Синий квадрат</title>
    <style>
    body {
    margin: 0;
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #f0f8ff;
    font-family: Arial, sans-serif;
    }
    .blue-square {
    width: 250px;
    height: 250px;
    background-color: #0066ff;
    border-radius: 10px;
    box-shadow: 0 0 20px rgba(0, 102, 255, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
    color: white;
    font-size: 18px;
    font-weight: bold;
    text-align: center;
    }
    </style>
    </head>
    <body>
    <div class="blue-square">
    Версия приложения 1.0
    </div>
    </body>
    </html>
  2. Создайте Dockerfile и сохраните спецификацию:

    FROM nginxinc/nginx-unprivileged:alpine
    COPY index.html /usr/share/nginx/html/index.html
    EXPOSE 8080

    Файлы index.html и Dockerfile должны запускаться без привилегий root. Обычный nginx:alpine в среде выполнения не запускается, поэтому используйте, например, nginxinc/nginx-unprivileged:alpine и порт 8080.

  3. Выполните команду:

    git add . && git commit -m "init" && git push origin main

Совет

Если код уже лежит локально, а репозиторий создан отдельно, подключите его командой eds repo remote-add (поддерживает --ssh). Для этого выполните последовательно команды:

eds repo create my-site
cd path/to/existing/local/repo
eds repo remote-add my-site
git push -u origin main

5. Создайте и опубликуйте приложение в Workflow Studio

Последовательно выполните команды:

REPO_ID=$(eds repo list --search my-site --json | jq -r '.repositories[] | select(.name=="my-site") | .id')
APP_ID=$(eds wf app create my-site --repository "$REPO_ID" --branch main --json | jq -r '.id')

Опция --json включает вывод в формате JSON. В терминале CLI по умолчанию выводит таблицы, а при передаче вывода в другую команду JSON включается автоматически.

Публикация запустится автоматически сразу после создания приложения. Отдельная команда deploy не нужна.

6. Проверьте статус публикации

Приложение публикуется автоматически. Дождитесь, пока статус изменится на «running».

Проверяйте application.status, а не только статус запуска:

for i in $(seq 1 20); do
STATUS=$(eds wf app show "$APP_ID" --json | jq -r '.status')
echo "status: $STATUS"
[ "$STATUS" = "running" ] || [ "$STATUS" = "error" ] && break
sleep 15
done

Статусы изменяются в следующем порядке: «for_create», «publishing», а затем «running» или «error». Статус «publishing» может держаться и после того, как запуск уже показывает «done».

Также статус приложения можно проверить в личном кабинете. Для этого перейдите в Workflow Studio → Service и нажмите карточку сервиса.

7. Получите URL приложения

Выполните команду:

URL=$(eds wf app deployments "$APP_ID" --json | jq -r '.deployments[0].url')
echo "url: $URL"

8. При возникновении ошибок выясните их причину

  1. Проверьте логи упавших заданий:

    eds wf app show "$APP_ID" --json | jq -r '.run.stages[].jobs[] | select(.status=="failed") | .id' | xargs -I{} eds wf job logs {}
  2. Чтобы остановить запуск, выполните:

    eds wf run stop <id>

    Где id — идентификатор запуска (run_id) из вывода eds wf app show .

9. После изменения кода опубликуйте приложение повторно

Чтобы опубликовать приложение после нового git push , выполните команду:

eds wf app deploy "$APP_ID"

Результат

Вы развернули приложение в Workflow Studio: установили DevServices CLI, создали репозиторий в Repo, отправили в него файлы с кодом приложения, запустили приложение и получили URL, по которому приложение доступно.