Skip to content

Docker Runner

Описание

runner-docker — раннер для выполнения задач Unishift в Docker-контейнерах. Для каждого task создаётся временный контейнер, выполняется команда, и контейнер удаляется.

Возможности

  • Выполнение задач в изолированных Docker-контейнерах
  • Автоматический pull образов с настраиваемой политикой
  • Монтирование рабочей директории в контейнер
  • Поддержка привилегированного режима
  • Стриминг stdout/stderr в реальном времени
  • Автоматическая упаковка и загрузка артефактов (workspace)
  • Настраиваемая сеть, пользователь, рабочая директория

Конфигурация

Общие параметры runner-common

См. Общая документация.

Docker-specific параметры

Флаги командной строки

ФлагОписаниеПо умолчанию
--imageDocker-образalpine:latest
--pull-policyПолитика pull: always, if-not-present, neverif-not-present
--mount-dirДиректория монтирования в контейнер/workspace
--workdirРабочая директория в контейнере= mount-dir
--networkРежим сети: bridge, host, none, <name>bridge
--userПользователь контейнера (например, 1000:1000)-
--docker-hostХост Docker-демона-
--privilegedПривилегированный режимfalse
--auto-removeАвто-удаление контейнераtrue
--upload-artifactsЗагрузка артефактовtrue
--artifact-modeРежим артефактов: none, workspaceworkspace

Переменные окружения

ПеременнаяОписание
DOCKER_HOSTХост Docker-демона
DOCKER_IMAGEDocker-образ
DOCKER_PULL_POLICYПолитика pull
DOCKER_MOUNT_DIRДиректория монтирования
DOCKER_WORKDIRРабочая директория
DOCKER_NETWORKРежим сети
DOCKER_USERПользователь контейнера
DOCKER_PRIVILEGEDПривилегированный режим (true/false)
DOCKER_AUTO_REMOVEАвто-удаление (true/false)
DOCKER_UPLOAD_ARTIFACTSЗагрузка артефактов (true/false)
DOCKER_ARTIFACT_MODEРежим артефактов

YAML конфигурация

yaml
url: "https://app.com/"
token: "your-token"
concurrency: 1

# Docker параметры
image: "node:18-alpine"
pull_policy: "if-not-present"
mount_dir: "/workspace"
workdir: "/workspace"
network: "bridge"
user: "1000:1000"
privileged: false
auto_remove: true
upload_artifacts: true
artifact_mode: "workspace"

Пер-task overrides

Через переменные задач можно переопределять настройки для конкретной задачи:

ПеременнаяОписание
DOCKER_IMAGEОбраз для этой задачи
DOCKER_PULL_POLICYПолитика pull
DOCKER_MOUNT_DIRДиректория монтирования
DOCKER_WORKDIRРабочая директория
DOCKER_NETWORKРежим сети
DOCKER_USERПользователь
DOCKER_PRIVILEGEDПривилегированный режим
DOCKER_AUTO_REMOVEАвто-удаление
DOCKER_UPLOAD_ARTIFACTSЗагрузка артефактов
DOCKER_ARTIFACT_MODEРежим артефактов

Как выполняется задача

  1. Создаётся временная workspace-директория на хосте (в artifact_tmp)
  2. Workspace монтируется в контейнер (по умолчанию /workspace)
  3. Pull образа (если нужно согласно pull_policy)
  4. Создаётся и запускается контейнер
  5. Команда выполняется как sh -lc "<command>"
  6. stdout/stderr стримятся в платформу
  7. После выполнения workspace упаковывается в ZIP и загружается как артефакт
  8. Контейнер удаляется (если auto_remove=true)

Артефакты

При upload_artifacts=true и artifact_mode="workspace":

  • Вся workspace-директория упаковывается в workspace.zip
  • ZIP загружается как артефакт
  • Возвращается artifact_id в статусе команды

Примеры использования

Запуск с конфигом

bash
./runner-docker -config config.yaml

Запуск с флагами

bash
./runner-docker \
  -url "https://app.com/" \
  -token "your-token" \
  -image "node:18" \
  -network host \
  -concurrency 2

Выполнение задачи

Команда задачи (например, npm test) выполняется внутри контейнера:

Container: node:18-alpine
Workdir: /workspace (монтирована с хоста)
Command: sh -lc "npm test"

Требования

  • Docker должен быть запущен и доступен
  • Пользователь раннера должен иметь доступ к Docker-сокету
  • Для привилегированного режима — права root или соответствующая конфигурация Docker

Остановка

Корректно обрабатывает SIGINT и SIGTERM. При остановке:

  • Текущие контейнеры получают сигнал остановки
  • workspace-директории удаляются
  • Контейнеры удаляются (если auto_remove=false)