Skip to content

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