С помощью этого руководства вы создадите через 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-агентов, в которых обычно нет ничего из перечисленного.
Шаги:
Рекомендованная операционная система для выполнения шагов практического руководства — Linux или macOS.
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
Проверьте, что ваша роль — «Администратор проекта» или выше. Она нужна, чтобы создавать API-ключи и управлять ими.
Создайте API-ключ и сохраните его, он понадобится позже. Для Repo и Workflow Studio используется один ключ.
Подключите Workflow Studio, если еще сервис не подключен:
В личном кабинете нажмите и выберите Разработка → Workflow Studio.
В окне Подключение сервиса Workflow Studio нажмите Подключить.
Для установки DevServices CLI рекомендуется использовать установщик из GitHub Release.
Чтобы установить DevServices CLI из GitHub Release, выполните команду:
curl -fsSL https://raw.githubusercontent.com/cloud-ru/evolution-devservices-cli/main/scripts/install.sh | bashexport PATH="$HOME/.local/bin:$PATH"eds version
Установщик определяет операционную систему, скачивает подходящий бинарный файл из последнего GitHub Release, помещает его в ~/.local/bin/eds и проверяет установку.
Альтернативный способ установки:
Скачайте бинарный файл со страницы релизов. Выберите 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-arm64chmod +x eds && sudo mv eds /usr/local/bin/eds
Чтобы собрать CLI из исходного кода, последовательно выполните команды:
git clone git@github.com:cloud-ru/evolution-devservices-cli.gitcd evolution-devservices-cligo install github.com/cloud-ru/evolution-devservices-cli@latest
Или:
make build # ./bin/edsmake build-all # darwin/linux x amd64/arm64 в ./dist/
Задайте переменные окружения:
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> — идентификатор проекта.
Чтобы работать с 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
Проверьте действующую конфигурацию и корректность идентификатора проекта:
eds config
Чтобы создать репозиторий в Repo, выполните команду:
eds repo create my-site
При создании репозитория можно указать описание и видимость private или shadow. Для этого вместо eds repo create my-site выполните команду:
eds repo create my-site --description "<your__description>" --visibility private
Чтобы клонировать репозиторий, выполните команду:
eds repo clone my-site
Команда eds repo clone по умолчанию клонирует репозиторий по HTTPS и записывает API-ключ в открытом виде в .git/config. Обращайтесь с каталогом клона так же осторожно, как и с самим ключом.
Чтобы клонировать по SSH, добавьте опцию --ssh. Для этого SSH-ключ хоста нужно зарегистрировать отдельно, CLI этого не делает.
Перейдите в каталог my-site:
cd my-site
В каталоге 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>
Создайте Dockerfile и сохраните спецификацию:
FROM nginxinc/nginx-unprivileged:alpineCOPY index.html /usr/share/nginx/html/index.htmlEXPOSE 8080
Файлы index.html и Dockerfile должны запускаться без привилегий root. Обычный nginx:alpine в среде выполнения не запускается, поэтому используйте, например, nginxinc/nginx-unprivileged:alpine и порт 8080.
Выполните команду:
git add . && git commit -m "init" && git push origin main
Совет
Если код уже лежит локально, а репозиторий создан отдельно, подключите его командой eds repo remote-add (поддерживает --ssh). Для этого выполните последовательно команды:
eds repo create my-sitecd path/to/existing/local/repoeds repo remote-add my-sitegit push -u origin main
Последовательно выполните команды:
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 не нужна.
Приложение публикуется автоматически. Дождитесь, пока статус изменится на «running».
Проверяйте application.status, а не только статус запуска:
for i in $(seq 1 20); doSTATUS=$(eds wf app show "$APP_ID" --json | jq -r '.status')echo "status: $STATUS"[ "$STATUS" = "running" ] || [ "$STATUS" = "error" ] && breaksleep 15done
Статусы изменяются в следующем порядке: «for_create», «publishing», а затем «running» или «error». Статус «publishing» может держаться и после того, как запуск уже показывает «done».
Также статус приложения можно проверить в личном кабинете. Для этого перейдите в Workflow Studio → Service и нажмите карточку сервиса.
Выполните команду:
URL=$(eds wf app deployments "$APP_ID" --json | jq -r '.deployments[0].url')echo "url: $URL"
Проверьте логи упавших заданий:
eds wf app show "$APP_ID" --json | jq -r '.run.stages[].jobs[] | select(.status=="failed") | .id' | xargs -I{} eds wf job logs {}
Чтобы остановить запуск, выполните:
eds wf run stop <id>
Где id — идентификатор запуска (run_id) из вывода eds wf app show .
Чтобы опубликовать приложение после нового git push , выполните команду:
eds wf app deploy "$APP_ID"
Вы развернули приложение в Workflow Studio: установили DevServices CLI, создали репозиторий в Repo, отправили в него файлы с кодом приложения, запустили приложение и получили URL, по которому приложение доступно.