Update README and Docker workflow to clarify registry login process and handling of secrets. Added explanation for why certain steps are not skipped in workflows, and improved the logic for logging in and pushing to the Container Registry.
Docker / build (push) Successful in 7s
Docker / build (push) Successful in 7s
This commit is contained in:
+29
-21
@@ -19,30 +19,37 @@ jobs:
|
|||||||
- name: Build image
|
- name: Build image
|
||||||
run: docker build -t cloudflare-balancer:ci .
|
run: docker build -t cloudflare-balancer:ci .
|
||||||
|
|
||||||
# Опционально: публикация в Container Registry Gitea.
|
# Публикация в registry: не используйте `if: secrets.X != ''` — в Gitea/GitHub
|
||||||
# Секреты репозитория:
|
# проверка «пустой ли секрет» в выражениях часто всегда ложна, шаги пропускаются.
|
||||||
# REGISTRY_URL — хост Gitea (https://gitea.example.com допустимо)
|
# Секреты пробрасываем в env и проверяем в bash.
|
||||||
# REGISTRY_USER — имя пользователя Gitea (логин)
|
#
|
||||||
# PACKAGE_TOKEN — токен для push в пакеты / registry (основной; пароль в docker login)
|
# Секреты: REGISTRY_URL, REGISTRY_USER, PACKAGE_TOKEN (или REGISTRY_PASSWORD)
|
||||||
# REGISTRY_PASSWORD — запасной вариант, если PACKAGE_TOKEN не задан
|
- name: Login and push to Container Registry (optional)
|
||||||
- name: Log in to registry
|
env:
|
||||||
if: ${{ secrets.REGISTRY_USER != '' && secrets.REGISTRY_URL != '' && (secrets.PACKAGE_TOKEN != '' || secrets.REGISTRY_PASSWORD != '') }}
|
REGISTRY_URL: ${{ secrets.REGISTRY_URL }}
|
||||||
|
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||||
|
PACKAGE_TOKEN: ${{ secrets.PACKAGE_TOKEN }}
|
||||||
|
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
run: |
|
run: |
|
||||||
REG="${{ secrets.REGISTRY_URL }}"
|
set -e
|
||||||
REG="${REG#https://}"
|
if [ "${GITHUB_EVENT_NAME:-}" = "pull_request" ]; then
|
||||||
REG="${REG#http://}"
|
echo "Pull request: push в registry не выполняется (только сборка)."
|
||||||
REG="${REG%/}"
|
exit 0
|
||||||
PASS="${{ secrets.PACKAGE_TOKEN }}"
|
fi
|
||||||
if [ -z "$PASS" ]; then PASS="${{ secrets.REGISTRY_PASSWORD }}"; fi
|
if [ -z "${REGISTRY_URL:-}" ] || [ -z "${REGISTRY_USER:-}" ]; then
|
||||||
echo "$PASS" | docker login "$REG" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
|
echo "Пропуск registry: задайте секреты REGISTRY_URL и REGISTRY_USER."
|
||||||
|
exit 0
|
||||||
- name: Tag and push
|
fi
|
||||||
if: ${{ secrets.REGISTRY_USER != '' && secrets.REGISTRY_URL != '' && (secrets.PACKAGE_TOKEN != '' || secrets.REGISTRY_PASSWORD != '') }}
|
PASS="${PACKAGE_TOKEN:-}"
|
||||||
run: |
|
if [ -z "$PASS" ]; then PASS="${REGISTRY_PASSWORD:-}"; fi
|
||||||
REG="${{ secrets.REGISTRY_URL }}"
|
if [ -z "$PASS" ]; then
|
||||||
REG="${REG#https://}"
|
echo "Пропуск registry: задайте PACKAGE_TOKEN или REGISTRY_PASSWORD."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
REG="${REGISTRY_URL#https://}"
|
||||||
REG="${REG#http://}"
|
REG="${REG#http://}"
|
||||||
REG="${REG%/}"
|
REG="${REG%/}"
|
||||||
|
echo "$PASS" | docker login "$REG" -u "$REGISTRY_USER" --password-stdin
|
||||||
IMG="cloudflare-balancer"
|
IMG="cloudflare-balancer"
|
||||||
OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
||||||
TAG="${GITHUB_SHA:0:12}"
|
TAG="${GITHUB_SHA:0:12}"
|
||||||
@@ -51,3 +58,4 @@ jobs:
|
|||||||
docker tag cloudflare-balancer:ci "${REG}/${OWNER_LOWER}/${IMG}:latest"
|
docker tag cloudflare-balancer:ci "${REG}/${OWNER_LOWER}/${IMG}:latest"
|
||||||
docker push "${REG}/${OWNER_LOWER}/${IMG}:${TAG}"
|
docker push "${REG}/${OWNER_LOWER}/${IMG}:${TAG}"
|
||||||
docker push "${REG}/${OWNER_LOWER}/${IMG}:latest"
|
docker push "${REG}/${OWNER_LOWER}/${IMG}:latest"
|
||||||
|
echo "Опубликовано: ${REG}/${OWNER_LOWER}/${IMG}:${TAG}"
|
||||||
|
|||||||
@@ -251,6 +251,8 @@ docker logs -f <container_id>
|
|||||||
|
|
||||||
> В Gitea создайте **Personal Access Token** (или токен с нужным scope) с доступом к **пакетам** / записи в Container Registry и сохраните его в секрете **`PACKAGE_TOKEN`**.
|
> В Gitea создайте **Personal Access Token** (или токен с нужным scope) с доступом к **пакетам** / записи в Container Registry и сохраните его в секрете **`PACKAGE_TOKEN`**.
|
||||||
|
|
||||||
|
> **Почему шаги не «Skipped»:** в workflow нет условия `if: secrets.… != ''` — в Gitea Actions (как и в GitHub) такие проверки часто **всегда ложны**, и публикация молча пропускается. Вместо этого один шаг всегда выполняется: при отсутствии секретов он выводит причину и завершается с кодом 0. На **pull request** push в registry намеренно не делается (только `docker build`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|||||||
Reference in New Issue
Block a user