Appearance
Docker Runner
Описание
runner-docker — раннер для выполнения задач Unishift в Docker-контейнерах. Для каждого task создаётся временный контейнер, выполняется команда, и контейнер удаляется.
Возможности
- Выполнение задач в изолированных Docker-контейнерах
- Автоматический pull образов с настраиваемой политикой
- Монтирование рабочей директории в контейнер
- Поддержка привилегированного режима
- Стриминг stdout/stderr в реальном времени
- Автоматическая упаковка и загрузка артефактов (workspace)
- Настраиваемая сеть, пользователь, рабочая директория
Конфигурация
Общие параметры runner-common
См. Общая документация.
Docker-specific параметры
Флаги командной строки
| Флаг | Описание | По умолчанию |
|---|---|---|
--image | Docker-образ | alpine:latest |
--pull-policy | Политика pull: always, if-not-present, never | if-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, workspace | workspace |
Переменные окружения
| Переменная | Описание |
|---|---|
DOCKER_HOST | Хост Docker-демона |
DOCKER_IMAGE | Docker-образ |
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 | Режим артефактов |
Как выполняется задача
- Создаётся временная workspace-директория на хосте (в
artifact_tmp) - Workspace монтируется в контейнер (по умолчанию
/workspace) - Pull образа (если нужно согласно pull_policy)
- Создаётся и запускается контейнер
- Команда выполняется как
sh -lc "<command>" - stdout/stderr стримятся в платформу
- После выполнения workspace упаковывается в ZIP и загружается как артефакт
- Контейнер удаляется (если 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)