Appearance
Shell Runner
Описание
runner-shell — раннер для выполнения shell-команд через платформу Unishift. Выполняет команды через /bin/sh -c, что позволяет использовать все возможности POSIX shell.
Возможности
- Выполнение произвольных shell-команд
- Поддержка пайпов, перенаправлений, логических операторов
- Подстановка переменных окружения из задач
- Стриминг stdout/stderr в реальном времени
- Обработка ошибок и таймаутов
- Сбор и загрузка артефактов (файлы/директории) в storage платформы
Конфигурация
Общие параметры runner-common
См. Общая документация.
Специфичные параметры
Shell-раннер не имеет специфичных параметров — используются только общие параметры runner-common.
Примеры конфигурации
YAML
yaml
url: "https://app.com/"
token: "your-token"
session_timeout: 10000
concurrency: 1
tags: "shell,linux"
description: "Shell command executor"JSON
json
{
"url": "https://app.com/",
"token": "your-token",
"session_timeout": 10000,
"concurrency": 1
}Переменные окружения
bash
export URL="https://app.com/"
export TOKEN="your-token"
export CONCURRENCY=1
export TAGS="shell,linux"Флаги командной строки
bash
./runner-shell \
-url "https://app.com/" \
-token "your-token" \
-concurrency 1 \
-tags "shell,linux"Выполнение команд
Команды выполняются через /bin/sh -c, что поддерживает:
- Простые команды:
ls -la - Пайпы:
ps aux | grep nginx - Перенаправления:
echo "text" > file.txt - Логические операторы:
cd /tmp && ls - Подстановку команд:
echo "Date: $(date)" - Heredoc:
cat << EOF > file.txt
Примеры команд
bash
# Список файлов
ls -la /var/log
# Мониторинг системы
df -h && free -m
# Обработка логов
grep "ERROR" /var/log/app.log | tail -100
# Создание резервной копии
tar -czf backup.tar.gz /path/to/dirПеременные задач
Переменные из cmdReq.Variables передаются как переменные окружения в shell:
Variables: [
{ name: "MY_VAR", value: "hello" },
{ name: "ENV", value: "production" }
]Внутри команды доступны как $MY_VAR и $ENV.
Артефакты
Раннер поддерживает автоматический сбор и загрузку артефактов в storage платформы.
Переменные для артефактов
| Переменная | Описание | Пример |
|---|---|---|
ARTIFACT_DIR | Директория для сбора всех файлов (рекурсивно) | /tmp/output |
ARTIFACT_FILES | Список glob-масок через запятую | report_*.csv,summary.json |
Поведение
- Артефакты собираются только при успешном выполнении команды (код возврата 0)
- Файлы упаковываются в zip-архив и загружаются в storage
- После успешной загрузки временные файлы удаляются автоматически
artifact_idвозвращается в статусе задачи
Примеры
Сбор директории:
bash
# В задаче: ARTIFACT_DIR="/tmp/output"
mkdir -p /tmp/output
python3 generate_report.py --output /tmp/outputСбор файлов по маске:
bash
# В задаче: ARTIFACT_FILES="result_*.csv,logs/*.log"
./process_data.shКомбинированный сбор:
bash
# В задаче:
# ARTIFACT_DIR="/tmp/build"
# ARTIFACT_FILES="config.yaml,README.md"
make build DESTDIR=/tmp/build
cp config.yaml README.md /tmp/build/Без артефактов:
bash
# Если переменные ARTIFACT_DIR и ARTIFACT_FILES не заданы,
# артефакты не собираются
echo "Просто вывод в консоль"Обработка ошибок
- Ненулевой код возврата → статус
failed - stdout возвращается в поле
output - stderr возвращается в поле
error - Таймаут контекста → сообщение "Command timed out"
Остановка
Корректно обрабатывает сигналы SIGINT и SIGTERM. Текущие команды получают контекст отмены.
Безопасность
- Команды выполняются с правами пользователя раннера
- Рекомендуется запуск от имени пользователя с минимальными правами
- Не рекомендуется запуск от root