Enhance README and Docker workflow with detailed explanations on registry authentication, workflow triggers, and optional container update webhook. Updated job permissions and streamlined Docker image build and push process.
Publish cloudflare-balancer Docker image / build-and-push (push) Failing after 2m36s

This commit is contained in:
Denozordec
2026-03-23 17:43:44 +07:00
parent ce99072937
commit a151c20049
2 changed files with 95 additions and 54 deletions
+17 -10
View File
@@ -239,19 +239,26 @@ docker logs -f <container_id>
## Сборка в CI (Gitea Actions)
1. На сервере Gitea включите **Actions** и подключите **runner** ([документация](https://docs.gitea.com/usage/actions/overview)).
2. Workflow: [.gitea/workflows/docker.yml](.gitea/workflows/docker.yml).
3. По умолчанию выполняется **`docker build`**.
4. Опциональная публикация в **Container Registry** Gitea: задайте секреты репозитория:
- `REGISTRY_URL` — хост (можно с `https://`, скрипт обрежет протокол для `docker login`).
- `REGISTRY_USER` — логин пользователя Gitea.
- **`PACKAGE_TOKEN`** — токен Gitea с правом публиковать пакеты (используется как **пароль** в `docker login`; рекомендуемый способ).
- `REGISTRY_PASSWORD` — опционально, только если не задан `PACKAGE_TOKEN` (устаревший/альтернативный секрет).
2. Workflow: [.gitea/workflows/docker.yml](.gitea/workflows/docker.yml)**Buildx**, `docker/login-action`, `docker/build-push-action`; пути и метаданные из контекста **`gitea.*`** (`repository`, `actor`, `sha`, `ref_name`, `server_url`).
Имя образа в registry: `<REGISTRY>/<owner_lowercase>/cloudflare-balancer:<tag>`.
**Авторизация в registry**
> В Gitea создайте **Personal Access Token** (или токен с нужным scope) с доступом к **пакетам** / записи в Container Registry и сохраните его в секрете **`PACKAGE_TOKEN`**.
- Отдельный **`ACTIONS_PAT` не нужен**: в `docker login` используется встроенный **`gitea.token`** (токен текущего запуска workflow) и **`gitea.actor`**. У job задано **`permissions: packages: write`** — этого достаточно для push в Container Registry на том же Gitea (при несовместимости вашей версии см. [документацию Gitea Actions](https://docs.gitea.com/usage/actions/overview)).
> **Почему шаги не «Skipped»:** в workflow нет условия `if: secrets.… != ''` — в Gitea Actions (как и в GitHub) такие проверки часто **всегда ложны**, и публикация молча пропускается. Вместо этого один шаг всегда выполняется: при отсутствии секретов он выводит причину и завершается с кодом 0. На **pull request** push в registry намеренно не делается (только `docker build`).
**Секрет для обновления контейнера (опционально)**
- **`CONTAINER_UPDATE_URL`** — полный URL webhook после успешного push (например ссылка **Redeploy** в Portainer, другой оркестратор). Workflow делает **`curl` (GET)** по этому URL; если секрет пустой, шаг только пишет в лог и выходит. При необходимости другого метода (POST) измените шаг в `docker.yml`.
**Переменные в workflow**
- **`env.REGISTRY`** в начале `docker.yml` — хост registry **без** схемы (`https://`), как для `docker pull` (в файле задан пример `git.shts.su`; замените при переносе на другой инстанс).
- **`IMAGE_REPO`:** `${{ gitea.repository }}` — полный путь образа: `${REGISTRY}/${{ gitea.repository }}`.
**Триггеры:** push по всем веткам и тегам, **`workflow_dispatch`**.
**Теги:** `latest`, «безопасное» имя ветки/тега (`/``-`), `sha-<12 hex>`.
**Job:** `permissions: contents: read`, `packages: write`.
---