docs: update README and CI workflow to clarify Gitea Registry login process and improve Docker image build conditions, including handling of secrets and environment variables
CI / changes (push) Successful in 5s
CI / go (push) Successful in 19s
CI / openapi (push) Has been skipped
CI / bird2 (push) Successful in 15s
CI / docker-images (deploy/docker/bird2/Dockerfile, evobgp-bird2) (push) Successful in 45s
CI / docker-images (deploy/docker/evobgp-agent/Dockerfile, evobgp-agent) (push) Successful in 1m6s
CI / docker-images (deploy/docker/evobgp-web/Dockerfile, evobgp-web) (push) Successful in 50s
CI / docker-images (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, evobgp-api) (push) Successful in 1m25s
CI / docker-images (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, evobgp-deploy) (push) Successful in 1m27s
CI / docker-images (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, evobgp-ingest) (push) Successful in 1m28s
CI / docker-images (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, evobgp-node) (push) Successful in 1m15s
CI / docker-images (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, evobgp-render) (push) Successful in 1m20s
CI / docker-images (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, evobgp-scheduler) (push) Successful in 1m26s
CI / docker-images (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, evobgp-all) (push) Successful in 1m27s
CI / changes (push) Successful in 5s
CI / go (push) Successful in 19s
CI / openapi (push) Has been skipped
CI / bird2 (push) Successful in 15s
CI / docker-images (deploy/docker/bird2/Dockerfile, evobgp-bird2) (push) Successful in 45s
CI / docker-images (deploy/docker/evobgp-agent/Dockerfile, evobgp-agent) (push) Successful in 1m6s
CI / docker-images (deploy/docker/evobgp-web/Dockerfile, evobgp-web) (push) Successful in 50s
CI / docker-images (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, evobgp-api) (push) Successful in 1m25s
CI / docker-images (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, evobgp-deploy) (push) Successful in 1m27s
CI / docker-images (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, evobgp-ingest) (push) Successful in 1m28s
CI / docker-images (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, evobgp-node) (push) Successful in 1m15s
CI / docker-images (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, evobgp-render) (push) Successful in 1m20s
CI / docker-images (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, evobgp-scheduler) (push) Successful in 1m26s
CI / docker-images (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, evobgp-all) (push) Successful in 1m27s
This commit is contained in:
+17
-10
@@ -16,40 +16,47 @@ Job **openapi** (Redocly) запускается только если в ком
|
|||||||
|
|
||||||
### Секреты репозитория (для push в реестр)
|
### Секреты репозитория (для push в реестр)
|
||||||
|
|
||||||
|
Хост Container Registry в workflow **зашит**: **`git.shts.su`** (`docker/login-action` и теги образов).
|
||||||
|
|
||||||
В настройках репозитория Gitea: **Settings → Actions → Secrets** (или аналог):
|
В настройках репозитория Gitea: **Settings → Actions → Secrets** (или аналог):
|
||||||
|
|
||||||
| Секрет | Назначение |
|
| Секрет | Назначение |
|
||||||
|--------|------------|
|
|--------|------------|
|
||||||
| `GITEA_REGISTRY_HOST` | Хост Docker-реестра (допустимо с `https://` — в workflow схема отрезается). Пример: `git.example.com` или `git.example.com:3000`. Значение попадает в переменную окружения **`REGISTRY`** для `docker/login-action`. |
|
| `ACTIONS_PAT` | (Опционально) PAT с правом **записи пакетов**. Если не задан, для `docker login` используется **`gitea.token`** (нужны права у workflow на пакеты). |
|
||||||
| `ACTIONS_PAT` | Персональный токен с правом **записи пакетов** (container / package write). Используется как пароль при `docker login`. |
|
|
||||||
|
|
||||||
Вход в реестр в workflow:
|
Вход в реестр в workflow:
|
||||||
|
|
||||||
- **registry:** `${{ env.REGISTRY }}` (из шага подготовки);
|
- **registry:** `git.shts.su`;
|
||||||
- **username:** `${{ gitea.actor }}` — пользователь, от имени которого запущен workflow (нативный контекст Gitea Actions);
|
- **username:** `${{ gitea.actor }}`;
|
||||||
- **password:** `${{ secrets.ACTIONS_PAT }}`.
|
- **password:** `${{ secrets.ACTIONS_PAT || gitea.token }}`.
|
||||||
|
|
||||||
Если **`GITEA_REGISTRY_HOST` не задан** или нет **`ACTIONS_PAT`**, job только **собирает** образы локально (`docker buildx --load`) без push.
|
### Почему шаг «Log in to Gitea Registry» мог быть skipped
|
||||||
|
|
||||||
|
Раньше в `if:` стояло **`secrets.ACTIONS_PAT != ''`**. В **Gitea act_runner** такая проверка секрета в условии шага часто **всегда ложна**, из‑за этого логин **всегда skipped**. Сейчас условие только `docker_push == 'true'` (всегда при нормальном шаге **Prepare**), пароль: **`secrets.ACTIONS_PAT || gitea.token`**.
|
||||||
|
|
||||||
|
Если после правки `docker login` падает с 401/403 — выдайте job-токену или PAT право **записи в Container Registry** (в настройках Gitea / организации / репозитория, в зависимости от версии).
|
||||||
|
|
||||||
|
Если **`gitea.token`** в выражениях недоступен, в [ci.yaml](workflows/ci.yaml) замените пароль на `${{ secrets.ACTIONS_PAT || github.token }}`.
|
||||||
|
|
||||||
### Имена образов и теги
|
### Имена образов и теги
|
||||||
|
|
||||||
Формат:
|
Формат:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
<GITEA_REGISTRY_HOST>/<owner_lowercase>/<имя>:<тег>
|
git.shts.su/<owner_lowercase>/<имя>:<тег>
|
||||||
```
|
```
|
||||||
|
|
||||||
где `<имя>` — одно из: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-agent`, `evobgp-bird2`.
|
где `<имя>` — одно из: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-agent`, `evobgp-bird2`.
|
||||||
|
|
||||||
Теги: `latest`, короткий SHA (7 символов), `sha-<полный_commit_sha>`.
|
Теги: `latest`, короткий SHA (7 символов), `sha-<полный_commit_sha>`.
|
||||||
|
|
||||||
Пример pull (подставьте свой хост и владельца):
|
Пример pull:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull git.example.com/myuser/evobgp-api:latest
|
docker pull git.shts.su/myuser/evobgp-api:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
Убедитесь, что в **Gitea** включены пакеты (Container Registry) и у токена есть права на создание/обновление образов. Если ваш инстанс требует другой путь имени образа, скорректируйте шаг `Build and push` в [ci.yaml](workflows/ci.yaml) (переменная `IMG`).
|
Убедитесь, что в **Gitea** включены пакеты (Container Registry) и у токена есть права на создание/обновление образов. Другой хост реестра — правьте **`registry:`** и префикс **`IMG=`** в [ci.yaml](workflows/ci.yaml).
|
||||||
|
|
||||||
### Примечания
|
### Примечания
|
||||||
|
|
||||||
|
|||||||
@@ -161,43 +161,30 @@ jobs:
|
|||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Prepare registry (REGISTRY in env + outputs)
|
- name: Prepare image metadata
|
||||||
id: meta
|
id: meta
|
||||||
env:
|
|
||||||
HOST: ${{ secrets.GITEA_REGISTRY_HOST }}
|
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
owner_lc="$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')"
|
owner_lc="$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')"
|
||||||
echo "owner_lc=$owner_lc" >> "$GITHUB_OUTPUT"
|
echo "owner_lc=$owner_lc" >> "$GITHUB_OUTPUT"
|
||||||
short_sha="$(echo '${{ github.sha }}' | cut -c1-7)"
|
short_sha="$(echo '${{ github.sha }}' | cut -c1-7)"
|
||||||
echo "short_sha=$short_sha" >> "$GITHUB_OUTPUT"
|
echo "short_sha=$short_sha" >> "$GITHUB_OUTPUT"
|
||||||
if [ -z "${HOST:-}" ]; then
|
echo "docker_push=true" >> "$GITHUB_OUTPUT"
|
||||||
echo "GITEA_REGISTRY_HOST not set — build without push."
|
|
||||||
echo "docker_push=false" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "REGISTRY=" >> "$GITHUB_ENV"
|
|
||||||
else
|
|
||||||
h="$HOST"
|
|
||||||
h="${h#https://}"
|
|
||||||
h="${h#http://}"
|
|
||||||
h="${h%/}"
|
|
||||||
echo "docker_push=true" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "REGISTRY=$h" >> "$GITHUB_ENV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Log in to Gitea Registry
|
- name: Log in to Gitea Registry
|
||||||
if: steps.meta.outputs.docker_push == 'true' && secrets.ACTIONS_PAT != ''
|
if: steps.meta.outputs.docker_push == 'true'
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.REGISTRY }}
|
registry: git.shts.su
|
||||||
username: ${{ gitea.actor }}
|
username: ${{ gitea.actor }}
|
||||||
password: ${{ secrets.ACTIONS_PAT }}
|
# PAT репозитория или встроенный токен job (нужны права на пакеты в настройках Actions).
|
||||||
|
password: ${{ secrets.ACTIONS_PAT || gitea.token }}
|
||||||
|
|
||||||
- name: Build and push ${{ matrix.image }}
|
- name: Build and push ${{ matrix.image }}
|
||||||
env:
|
env:
|
||||||
OWNER_LC: ${{ steps.meta.outputs.owner_lc }}
|
OWNER_LC: ${{ steps.meta.outputs.owner_lc }}
|
||||||
SHORT_SHA: ${{ steps.meta.outputs.short_sha }}
|
SHORT_SHA: ${{ steps.meta.outputs.short_sha }}
|
||||||
DO_PUSH: ${{ steps.meta.outputs.docker_push }}
|
DO_PUSH: ${{ steps.meta.outputs.docker_push }}
|
||||||
PAT_OK: ${{ secrets.ACTIONS_PAT != '' }}
|
|
||||||
DF: ${{ matrix.dockerfile }}
|
DF: ${{ matrix.dockerfile }}
|
||||||
IMAGE: ${{ matrix.image }}
|
IMAGE: ${{ matrix.image }}
|
||||||
BIN: ${{ matrix.bin }}
|
BIN: ${{ matrix.bin }}
|
||||||
@@ -214,8 +201,8 @@ jobs:
|
|||||||
BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}")
|
BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DO_PUSH" = "true" ] && [ -n "${REGISTRY:-}" ] && [ "$PAT_OK" = "true" ]; then
|
if [ "$DO_PUSH" = "true" ]; then
|
||||||
IMG="${REGISTRY}/${OWNER_LC}/${IMAGE}"
|
IMG="git.shts.su/${OWNER_LC}/${IMAGE}"
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64 \
|
||||||
--file "$DF" \
|
--file "$DF" \
|
||||||
|
|||||||
Reference in New Issue
Block a user