Files
git-forge-management/references/gitea-actions-bash-jobs.md
2026-09-06 13:51:15 +00:00

4.4 KiB
Raw Permalink Blame History

Gitea Actions: bash в job-образе, секреты, апгрейд runner — 2026-08-30 (bigbox, gitea.nixg.ru)

ГЛАВНЫЙ ПИТФОЛЛ: job-образ обязан содержать bash

Gitea Actions (как и GitHub) исполняет каждый run-шаг через bash --noprofile --norc -e -o pipefail — жёсткий дефолт, одинаковый в act_runner 0.6.x и gitea/runner 3.x.

  • docker:27 (Alpine) имеет только busybox sh → мгновенный failure шага: OCI runtime exec failed: exec: "bash": executable file not found in $PATH, exit 127.
  • Job-контейнер при этом стартует нормально (в логе видны docker create/run) — падает только exec шага.
  • Это объясняет серию мгновенных failures (0 сек) без видимой причины в docker logs runner (там только info "task N repo is ...").

Фикс: тонкий job-образ docker:27 + bash

docker build -t docker27-bash:latest - <<'EOF'
FROM docker:27
RUN apk add --no-cache bash
EOF

Label runner'а → GITEA_RUNNER_LABELS=ubuntu-24.04:docker://docker27-bash:latest. Перерегистрация не нужна: gitea/runner v3 обновляет labels на лету (в логах "labels updated to: [...]"). С bash в образе пишутся обычные bash-шаги. Костыли shell: sh / sh -c '...' не нужны (в act_runner v0.6.1 shell: под run не поддерживался).

Секреты: GITHUB_TOKEN vs персональный токен

  • secrets.GITHUB_TOKEN — выдаётся Gitea Actions автоматически, имеет доступ к репозиторию (clone). git clone "https://hermes:${{ secrets.GITHUB_TOKEN }}@gitea.nixg.ru/hermes/icq.git" .
  • Персональный токен со scope только write:package → git clone даёт 403 Forbidden (remote: Forbidden) — нет read:repository.
  • docker login в registry: echo "${{ secrets.PKG_TOKEN }}" | docker login gitea.nixg.ru -u hermes --password-stdin (scope write:package).
  • Проброс секрета через env: НЕ доходил до git clone; инлайн user:token@ в URL работает.

Апгрейд runner: act_runner → gitea/runner

  • Проект переехал: gitea.com/gitea/act_runner → gitea.com/gitea/runner (тег v3.3.1, авг 2026).
  • Docker Hub gitea/act_runner заморожен на 0.6.1 (апр 2026); свежие образы — gitea/runner:3.3.1 / latest / nightly.
  • Env совместимы: GITEA_INSTANCE_URL, GITEA_RUNNER_REGISTRATION_TOKEN, GITEA_RUNNER_NAME, GITEA_RUNNER_LABELS, GITEA_INSECURE_SKIP_VERIFY.
  • .runner переживает мажорный апгрейд (id/labels сохраняются).
  • v3: gitea-runner daemon --labels меняет labels без перерегистрации; config generate; log.job.dir пишет логи задач на диск.

Диагностика run — рабочие эндпоинты

AUTH="-u hermes:PASS"; BASE="https://gitea.nixg.ru/api/v1"
# Статус + steps (работает и для completed)
curl -s $AUTH "$BASE/repos/hermes/icq/actions/runs/N/jobs"
# ПОЛНЫЙ лог шагов — доступен ПОСЛЕ завершения run (лив-логи не отдаёт):
curl -s $AUTH "$BASE/repos/hermes/icq/actions/jobs/{id}/logs"   # HTTP 200, весь вывод
  • Логи шагов НЕ видны в docker logs job-контейнера (stdout уходит в Gitea).
  • git commit --allow-empty НЕ триггерит Actions — нужен реальный change (например, правка самого workflow-файла).

Результат сессии

  • Образ gitea.nixg.ru/hermes/icq-prosody (теги 13.0, latest, digest идентичны) собран из hermes/icq: prosody-docker/Dockerfile (base prosodyim/prosody:13.0) + COPY кастомных модулей /opt/icq/modules в /usr/lib/prosody/modules/.
  • Workflow run 11: success (Checkout → Login → Build → Push). Сборка идёт хостовым docker-демоном через docker.sock.
  • Внутри образа: prosody 13.0 + mod_admin_web, mod_http_upload_external, mod_muc_moderation, mod_vcard_muc, mod_privilege.lua.