CI/CD-процессы помогают гарантировать воспроизводимость сборок, ускоряют проверки и уменьшают ручной труд. Обычно GitLab Runner размещают на сервере или в облаке. Однако в практических задачах (локальное тестирование, разработка, демонстрационные стенды, временные сборки “на месте”) удобно поднять полноценный пайплайн прямо в Termux.
В этой статье мы разберём, как установить и запустить GitLab Runner в Termux, зарегистрировать его в вашем GitLab-проекте и настроить .gitlab-ci.yml для автоматической сборки приложений. Акцент сделан на практику: окружение, пользователи, права, кэш, артефакты, а также типовые ошибки.
Что понадобится
- Android-устройство с установленным Termux.
- Аккаунт и проект в GitLab (GitLab.com или саморазмещённый GitLab).
- Базовые навыки работы с консолью Termux.
- Рекомендуется заряд/источник питания и стабильный Wi‑Fi (сборки чувствительны к обрывам).
Шаг 1. Подготовка Termux
Обновим пакеты и установим зависимости. В Termux используйте официальные команды обновления окружения:
pkg update -y
pkg upgrade -yДля сборок и запуска внешних инструментов обычно нужны базовые пакеты:
pkg install -y git curl wget unzip ca-certificates gnupg procps openssh-toolsЕсли планируете собирать конкретные типы проектов (например, Java/Gradle, Node.js, Go, Python), установите соответствующие инструменты дополнительно — в статье мы сфокусируемся на GitLab Runner и универсальной структуре пайплайна.
Шаг 2. Установка GitLab Runner в Termux
GitLab Runner — это исполняемый агент. В Termux есть ограничение по архитектурам и формату поставки, поэтому наиболее надёжный подход — взять официальный бинарник под Linux/ARM (или собрать из исходников, если у вас есть соответствующий toolchain). На практике для Termux чаще используют бинарник “как есть”, учитывая архитектуру Android.
1) Определите архитектуру:
uname -m2) Перейдите к поиску релиза GitLab Runner и скачайте бинарник, соответствующий вашей архитектуре. Например, для части устройств это может быть aarch64 или armv7.
Далее общий сценарий (замените имя файла под ваш бинарник):
cd $HOME
curl -L -o gitlab-runner https://gitlab-runner-download-url.example.com/gitlab-runner-linux-arm64
chmod +x gitlab-runnerВажно: используйте корректную ссылку на скачивание из официального источника GitLab Runner. Если вы не уверены, какой именно бинарник нужен под ваш случай, лучше уточнить в документации GitLab Runner и в релизах.
3) Создадим каталоги для конфигурации и рабочих директорий:
mkdir -p $HOME/gitlab-runner/config
mkdir -p $HOME/gitlab-runner/cache
mkdir -p $HOME/gitlab-runner/buildsШаг 3. Регистрация GitLab Runner в GitLab
Перед регистрацией нужно получить Registration Token в GitLab. В GitLab UI обычно это находится в:
- Project → Settings → CI/CD → Runners (или аналогичный раздел)
- или в Admin настройках для инстанса
В Termux запускаем регистрацию. В GitLab Runner есть команда register. Для бинарника, установленного в текущей директории:
$HOME/gitlab-runner/bin/gitlab-runner registerНо у вас бинарник лежит по пути $HOME/gitlab-runner/gitlab-runner, поэтому используйте:
$HOME/gitlab-runner/gitlab-runner registerДалее отвечайте на вопросы интерактивного мастера. Типовые параметры:
- GitLab URL: например,
https://gitlab.com/или адрес вашего GitLab. - Registration Token: из интерфейса GitLab.
- Description: например,
termux-runner-rybinsklab. - Tags: например,
termux. - Executor: рекомендуется
shellдля Termux, так как Docker может быть недоступен или ограничен.
Пример (упрощённо, значения замените на свои):
$HOME/gitlab-runner/gitlab-runner register
# GitLab URL: https://gitlab.com/
# Token: XXXX
# Description: termux
# Tags (comma separated): termux, android
# Executor: shellПосле регистрации GitLab Runner создаст конфигурационный файл config.toml (обычно рядом с местом конфигурации). Если вы хотите явно контролировать путь, настраивайте окружение и командные параметры согласно вашему варианту запуска.
Шаг 4. Настройка config.toml для Termux
Сконфигурируйте рабочие каталоги, чтобы сборки не “съедали” системное хранилище и чтобы кэш/артефакты складывались предсказуемо.
Откройте конфиг config.toml (путь зависит от того, где Runner сохранил настройки):
ls -la $HOME/gitlab-runnerДалее найдите config.toml и отредактируйте. Пример целевых параметров (концептуально):
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "termux-runner"
url = "https://gitlab.com/"
token = "YOUR_RUNNER_TOKEN"
executor = "shell"
builds_dir = "$HOME/gitlab-runner/builds"
cache_dir = "$HOME/gitlab-runner/cache"Почему concurrent = 1: на мобильных устройствах параллельные сборки часто приводят к деградации производительности, перегреву и разрывам сессий. Для старта лучше ограничить одним джобом.
Шаг 5. Запуск GitLab Runner в Termux
Запускайте Runner в фоне и следите за логами. Для shell-executor обычно достаточно стандартного запуска:
$HOME/gitlab-runner/gitlab-runner run --config $HOME/gitlab-runner/config.tomlЕсли конфиг находится по другому пути, подставьте корректный. Для удобства можно логировать в файл:
$HOME/gitlab-runner/gitlab-runner run --config $HOME/gitlab-runner/config.toml > $HOME/gitlab-runner/runner.log 2>&1 &Проверьте, что раннер “подхватывает” джобы:
tail -n 100 $HOME/gitlab-runner/runner.logШаг 6. Настройка .gitlab-ci.yml под Termux Runner
Теперь создадим пайплайн. Ключевая идея: привязать джобы к раннеру через tags. Если вы указали теги termux при регистрации, в .gitlab-ci.yml укажите их в каждом job.
Пример минимального пайплайна, который выводит информацию о среде и собирает артефакт:
stages:
- build
build_on_termux:
stage: build
tags:
- termux
script:
- echo "Start build on Termux runner"
- uname -a
- pwd
- ls -la
- mkdir -p dist
- echo "Build from GitLab CI at $(date)" > dist/build-info.txt
artifacts:
when: always
paths:
- dist/
expire_in: 1 weekРазберём элементы:
- stages — этапы пайплайна.
- tags — выбор Runner’а.
- script — команды, которые выполнит executor.
- artifacts — артефакты, которые будут загружены в GitLab.
Шаг 7. Кэширование (ускорение повторных сборок)
Кэш позволяет не скачивать зависимости заново. Для Termux shell-executor это особенно полезно: пакеты/модули могут быть тяжёлыми.
Пример для проектов, где есть директория зависимостей (универсальный шаблон):
build_on_termux:
stage: build
tags:
- termux
cache:
key: "termux-cache-${CI_COMMIT_REF_SLUG}"
paths:
- .cache/
- node_modules/ # если это Node.js проект
script:
- mkdir -p .cache
- echo "Use cache if available"Выбирайте paths под ваш стек. Не включайте в кэш “мусор” вроде dist или .git без необходимости.
Шаг 8. Типовой сценарий: сборка Android-проекта (общее представление)
Если вы собираете, например, Android-проект через Gradle, общий подход остаётся тем же: команды install dependencies (если нужно), ./gradlew assemble, артефакты, теги.
К примеру, структура job может быть такой (адаптируйте под ваш проект):
build_android_release:
stage: build
tags:
- termux
script:
- chmod +x ./gradlew || true
- ./gradlew --no-daemon assembleRelease
artifacts:
when: always
paths:
- app/build/outputs/apk/release/
- app/build/outputs/bundle/release/
expire_in: 2 weeksЕсли зависимости требуют Java/SDK, их следует установить заранее в Termux и зафиксировать окружение переменными. Для устойчивости лучше использовать заранее подготовленный “боевой” профиль Termux.
Шаг 9. Обеспечение стабильности: ресурсы, права, сеть
9.1 Ограничьте параллельность
Для мобильного устройства обычно разумно:
- в
config.tomlдержатьconcurrent = 1 - в GitLab лимитировать количество одновременных джобов (если используете очереди)
9.2 Следите за правами на каталоги
Runner под shell-executor запускает команды от имени пользователя. Убедитесь, что каталоги builds_dir и cache_dir доступны.
chmod -R u+rwX $HOME/gitlab-runner/cache
chmod -R u+rwX $HOME/gitlab-runner/builds9.3 Артефакты — только нужные
Ограничивайте artifacts.paths конкретными каталогами сборки. Это уменьшит время загрузки в GitLab.
9.4 Сеть: минимизация “тяжёлых” шагов
Если сборки скачивают большие зависимости, обеспечьте стабильное подключение. Для мобильной сети часто полезно включать контроль энергосбережения (а в идеале — использовать Wi‑Fi).
Шаг 10. Типовые проблемы и быстрые проверки
- Runner не появляется в GitLab: проверьте теги, статус раннера и запуск команды
runв Termux. Сверьте URL и токен. - Джоб “pending” бесконечно: проверьте, что теги в
.gitlab-ci.ymlсовпадают с тегами раннера. - Ошибка прав: убедитесь, что каталоги
builds_dir/cache_dirдоступны пользователю Termux. - Проблемы со скриптами: используйте
echoиlsдля диагностики, а также проверяйте, что нужные бинарники доступны вPATH.
Про локальную сеть и VPN (только для удобства подключения)
Если вы используете саморазмещённый GitLab и хотите удобно подключать устройство из Termux к внутренним ресурсам, можно организовать локальную сеть с помощью VPN. Важно использовать VPN именно для формирования локальной сети и стабильного доступа, а не для обхода блокировок. Тогда Runner сможет обращаться к вашему GitLab URL и репозиториям без “неожиданных” ограничений.
Заключение
Настройка GitLab Runner внутри Termux позволяет сделать CI/CD-пайплайн практически “портативным”: вы можете автоматизировать сборки прямо с мобильного устройства, привязав джобы через tags, настроив shell-executor, artifacts и cache. Такой подход особенно полезен для локальных стендов, быстрых тестов, демонстрационных сборок и сценариев, где важна оперативность.
Если хотите, мы в РыбинскЛАБ поможем подобрать конфигурацию под ваш стек (Java/Gradle, Node.js, Python, Go и т.д.), настроить устойчивый Runner, шаблоны .gitlab-ci.yml и сопроводим внедрение в ваш процесс разработки.