We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Использование Termux как платформы для CI/CD: запуск тестов, статический анализ кода и деплой на удалённые серверы

Разбираем, как настроить CI/CD на Termux: запуск unit-тестов, статический анализ (линтеры и форматирование), и безопасный деплой на удалённые серверы по SSH.

CI/CD традиционно ассоциируется с серверами, контейнерами и облачными платформами. Однако на практике часто возникает задача: быстро автоматизировать сборку, запуск тестов, статический анализ и деплой, используя компактное и доступное устройство. Termux в этом смысле выступает удобной «легковесной лабораторией»: он позволяет собрать окружение, задать последовательность шагов и выполнять их повторяемо.

В этой статье мы покажем практический подход к построению пайплайна CI/CD на Termux без привязки к конкретной экосистеме: вы сможете запускать тесты, линтинг, форматирование, а затем деплоить артефакты на удалённые серверы по SSH. Материал ориентирован на использование в рамках легальных и безопасных процессов разработки (без обхода ограничений и без эксплуатации уязвимостей).

1. Архитектура пайплайна CI/CD на Termux

Пайплайн можно представить как набор этапов:

  • Подготовка окружения (зависимости, переменные окружения).
  • Код (получить исходники: Git pull/checkout).
  • Тесты (unit/integration, статический анализ до/после тестов).
  • Качество (линтеры, форматирование, проверка типов — по языку).
  • Сборка/упаковка (артефакт, сборка пакета).
  • Деплой на удалённый сервер (обычно по SSH: копирование и перезапуск сервиса).

На Termux это удобно реализовать в виде сценариев (bash), которые исполняются вручную или по расписанию (например, через задачи Termux/cron-подобный механизм в зависимости от ваших условий).

2. Подготовка Termux и базовые зависимости

Начните с установки основных пакетов. В Termux откройте терминал и выполните:

pkg update -y
pkg upgrade -y
pkg install -y git openssh-client bash curl

Если планируете деплой через сборку/языковые инструменты — дополнительно установите соответствующие пакеты (в примерах ниже будут показаны команды для популярных экосистем).

3. Безопасный деплой на удалённый сервер по SSH

Ключевой элемент CI/CD на Termux — возможность подключаться к удалённым серверам. На практике это делается через SSH-ключи (а не через логин/пароль в сценариях).

3.1. Сгенерируйте SSH-ключ (один раз) и добавьте публичный ключ на сервер

ssh-keygen -t ed25519 -a 64 -f ~/.ssh/id_ed25519_ci -N "" -C "termux-ci"

Далее скопируйте публичный ключ на сервер (способ зависит от вашей инфраструктуры; здесь логика такая: добавить содержимое файла ~/.ssh/id_ed25519_ci.pub в ~/.ssh/authorized_keys нужного пользователя на сервере).

3.2. Проверьте доступ

ssh -i ~/.ssh/id_ed25519_ci -p 22 user@your-server.example.com "hostname"

Если вам нужно временно работать в локальной сети через VPN для организации доступа (не для обхода ограничений), убедитесь, что в такой схеме корректно настраивается маршрутизация к серверу. В сценариях CI/CD по-прежнему используйте SSH и ключи.

4. Универсальный сценарий пайплайна: тесты → анализ → деплой

Ниже приведён шаблон bash-сценария. Он рассчитан на то, что вы заранее подготовите переменные окружения (адрес сервера, путь назначения, название приложения и т.п.).

4.1. Структура

  • Сначала выполняем checkout/обновление репозитория.
  • Далее запускаем тесты.
  • Затем — статический анализ/линтинг.
  • Если всё успешно — упаковываем артефакты и делаем деплой по SSH.

4.2. Пример сценария

#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail

REPO_DIR="$HOME/project"
BRANCH="main"

# Настройки деплоя
SERVER_HOST="your-server.example.com"
SERVER_PORT="22"
SERVER_USER="user"
SERVER_PATH="/opt/myapp"
SSH_KEY="$HOME/.ssh/id_ed25519_ci"

echo "==> Preparing workspace"
mkdir -p "$REPO_DIR"
cd "$REPO_DIR"

if [ -d .git ]; then
  git fetch --all
  git checkout "$BRANCH"
  git pull --ff-only
else
  # Вставьте ваш URL репозитория
  git clone --branch "$BRANCH" "https://example.com/your/repo.git" .
fi

echo "==> Running tests"
# Замените на команды вашей экосистемы
# например: npm test / pytest / go test / mvn test

echo "==> Static analysis / linting"
# Замените на команды вашей экосистемы

echo "==> Build / package"
# Замените на команды вашей экосистемы

echo "==> Deploy"
# Пример: копирование артефакта и перезапуск сервиса
# Предположим, что артефакт лежит в $REPO_DIR/dist/app.tar.gz
ARTIFACT="$REPO_DIR/dist/app.tar.gz"

scp -i "$SSH_KEY" -P "$SERVER_PORT" "$ARTIFACT" "$SERVER_USER@$SERVER_HOST:/tmp/app.tar.gz"
ssh -i "$SSH_KEY" -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST" "set -e
  mkdir -p '$SERVER_PATH'
  tar -xzf /tmp/app.tar.gz -C '$SERVER_PATH'
  rm -f /tmp/app.tar.gz
  # Перезапуск сервиса: команда зависит от вашей системы
  # например: systemctl restart myapp
  true"

echo "==> Done"

Важно: команды тестов/линтинга/сборки нужно заменить на реальные для вашего языка и проекта.

5. Практика: Node.js (npm) — тесты, линтер и деплой

Если ваш проект на Node.js, базовый набор выглядит так: зависимости ставятся через npm ci, тесты — через npm test, линтер/форматирование — через eslint и/или prettier.

5.1. Установка окружения в Termux

Пакеты Node.js в Termux зависят от текущих репозиториев и вашего способа установки. Если Node.js уже установлен — пропустите. Для примера используем стандартную проверку:

node -v
npm -v

5.2. Команды в пайплайне

# в корне проекта
npm ci

npm test

# статический анализ / качество
npm run lint
# или если есть форматирование
npm run format:check

5.3. Деплой (пример с артефактом)

Типовой подход: собрать артефакт в dist и затем развернуть на сервере. В сценарии это выглядит примерно так:

npm run build
tar -czf dist/app.tar.gz -C dist .

Дальше артефакт отправляется на сервер через scp, а команда на сервере распаковывает и перезапускает сервис (например, через systemctl).

6. Практика: Python (pytest, ruff/flake8, mypy) — тесты и статический анализ

Для Python в Termux обычно используются виртуальные окружения и стандартный стек инструментов качества.

6.1. Создание venv и установка зависимостей

pkg install -y python
python -m venv .venv
. .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

# опционально: зависимости для тестов/линтинга
pip install pytest ruff mypy

6.2. Тесты

pytest -q

6.3. Статический анализ и линтинг

Вариант с Ruff:

ruff check .
ruff format --check .

Вариант с mypy (типизация):

mypy .

6.4. Деплой

Варианты зависят от того, как вы запускаете приложение на сервере (systemd service, контейнер, uWSGI и т.д.). Один из практичных CI-подходов: формировать пакет/собранные файлы и копировать на сервер.

Например, если у вас есть готовый сборочный артефакт или вы копируете исходники:

# Упаковка исходников (упрощённо)
tar -czf app.tar.gz .
scp -i ~/.ssh/id_ed25519_ci -P 22 app.tar.gz user@your-server.example.com:/tmp/app.tar.gz
ssh -i ~/.ssh/id_ed25519_ci -p 22 user@your-server.example.com "set -e
  rm -rf /opt/myapp
  mkdir -p /opt/myapp
  tar -xzf /tmp/app.tar.gz -C /opt/myapp
  rm -f /tmp/app.tar.gz
  # Перезапуск: пример
  true"

7. Статический анализ как обязательный gate в CI

Суть CI/CD — раннее обнаружение проблем. На Termux это особенно удобно, потому что вы можете быстро прогонять:

  • линг (потенциальные ошибки, стиль, потенциально опасные практики),
  • проверку форматирования,
  • типы (если применимо),
  • тесты.

Практическое правило: сначала статический анализ (часто быстрее), затем тесты. Но порядок можно менять в зависимости от стоимости каждого этапа и вашей модели качества. Главное — сделать так, чтобы деплой выполнялся только при успешном прохождении всех обязательных шагов.

8. Как запускать пайплайны на Termux регулярно

Варианты зависят от ваших требований и условий запуска. На практике чаще всего используют:

  • ручной запуск сценария командой (быстро и прозрачно);
  • запуск по расписанию средствами самого Termux (если применимо в вашем окружении);
  • обёртку через внешний триггер (например, если у вас есть сервер, который уведомляет об изменениях).

Независимо от способа запуска, сценарий должен быть идемпотентным: повторный запуск не должен приводить к повреждению окружения. Используйте чистые каталоги сборки или сбрасывайте их перед сборкой.

9. Рекомендации по надёжности и безопасности

  • Не храните пароли в сценариях. Используйте SSH-ключи.
  • Фиксируйте версии зависимостей (например, package-lock.json для npm и requirements.txt с зафиксированными версиями для Python).
  • Ограничивайте права пользователя на сервере, под которым выполняется деплой.
  • Проверяйте целостность артефактов (хотя бы по хешам/структуре) перед развертыванием.
  • Логируйте ход выполнения (вывод в консоль и/или в файл в каталоге проекта).

Заключение

Termux можно использовать как полноценную «домашнюю» платформу для CI/CD: запускать тесты, прогонять статический анализ и выполнять деплой на удалённые серверы по SSH. Такой подход особенно удобен, когда важна мобильность, быстрые проверки качества и экономия времени на развертывание сложной инфраструктуры.

Если вы хотите внедрить CI/CD-процессы в вашем проекте (под конкретный язык, с нужными этапами и безопасным деплоем), обратитесь в РыбинскЛАБ — поможем спроектировать пайплайн, настроить инструменты качества и автоматизировать доставку изменений до продакшена.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект