mirror of
https://gitverse.ru/kpa39l/git-forge-management.git
synced 2026-09-29 09:15:05 +00:00
4.4 KiB
4.4 KiB
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.