Обновлен файл HARBOR_TAG_FORMAT.md для уточнения формата тегов Docker образов и добавления информации о необходимых секретах для работы с Harbor. Внесены изменения в файл docker-build-local.yml для поддержки переменной PROJECT_NAME и исправления формата тегов. Эти изменения улучшают документацию и функциональность CI/CD процесса.
This commit is contained in:
parent
4a82849ec2
commit
3b35191ec2
@ -45,24 +45,25 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
# Harbor формат: registry_url/project/repository:tag
|
# Harbor формат: registry_url/project/repository:tag
|
||||||
REGISTRY_URL="${{ secrets.DOCKER_REGISTRY_URL }}"
|
REGISTRY_URL="${{ secrets.DOCKER_REGISTRY_URL }}"
|
||||||
|
PROJECT_NAME="${{ secrets.DOCKER_REGISTRY_PROJECT || 'salvage_bot' }}"
|
||||||
IMAGE_NAME="${{ env.IMAGE_NAME }}"
|
IMAGE_NAME="${{ env.IMAGE_NAME }}"
|
||||||
|
|
||||||
# Убираем протокол из registry URL если есть
|
# Убираем протокол из registry URL если есть
|
||||||
REGISTRY_URL=$(echo "$REGISTRY_URL" | sed 's|^https\?://||')
|
REGISTRY_URL=$(echo "$REGISTRY_URL" | sed 's|^https\?://||')
|
||||||
|
|
||||||
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||||
echo "tags=${REGISTRY_URL}/${IMAGE_NAME}:${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
|
echo "tags=${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
|
||||||
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||||
pr_number=${{ github.event.number }}
|
pr_number=${{ github.event.number }}
|
||||||
echo "tags=${REGISTRY_URL}/${IMAGE_NAME}:pr-${pr_number}" >> $GITHUB_OUTPUT
|
echo "tags=${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:pr-${pr_number}" >> $GITHUB_OUTPUT
|
||||||
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
|
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
|
||||||
tag=${GITHUB_REF#refs/tags/}
|
tag=${GITHUB_REF#refs/tags/}
|
||||||
echo "tags=${REGISTRY_URL}/${IMAGE_NAME}:${tag},${REGISTRY_URL}/${IMAGE_NAME}:latest" >> $GITHUB_OUTPUT
|
echo "tags=${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:${tag},${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:latest" >> $GITHUB_OUTPUT
|
||||||
elif [[ "${{ github.ref_name }}" == "main" ]]; then
|
elif [[ "${{ github.ref_name }}" == "main" ]]; then
|
||||||
echo "tags=${REGISTRY_URL}/${IMAGE_NAME}:latest,${REGISTRY_URL}/${IMAGE_NAME}:main" >> $GITHUB_OUTPUT
|
echo "tags=${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:latest,${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:main" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
branch_name=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9]/-/g')
|
branch_name=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9]/-/g')
|
||||||
echo "tags=${REGISTRY_URL}/${IMAGE_NAME}:${branch_name}" >> $GITHUB_OUTPUT
|
echo "tags=${REGISTRY_URL}/${PROJECT_NAME}/${IMAGE_NAME}:${branch_name}" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
@ -85,6 +86,7 @@ jobs:
|
|||||||
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
|
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Event:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Event:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Registry:** ${{ secrets.DOCKER_REGISTRY_URL }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Registry:** ${{ secrets.DOCKER_REGISTRY_URL }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Project:** ${{ secrets.DOCKER_REGISTRY_PROJECT || 'salvage_bot' }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Repository:** ${{ env.IMAGE_NAME }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Repository:** ${{ env.IMAGE_NAME }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Tags:** ${{ steps.tags.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Tags:** ${{ steps.tags.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
|
||||||
@ -101,9 +103,10 @@ jobs:
|
|||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "### ⚠️ Configuration Required:" >> $GITHUB_STEP_SUMMARY
|
echo "### ⚠️ Configuration Required:" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "To push images to registry, configure these secrets:" >> $GITHUB_STEP_SUMMARY
|
echo "To push images to registry, configure these secrets:" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- \`DOCKER_REGISTRY_URL\` - registry URL (e.g., registry.gitlab.com)" >> $GITHUB_STEP_SUMMARY
|
echo "- \`DOCKER_REGISTRY_URL\` - registry URL (e.g., reg.ddl.su)" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- \`DOCKER_REGISTRY_USERNAME\` - registry username" >> $GITHUB_STEP_SUMMARY
|
echo "- \`DOCKER_REGISTRY_PROJECT\` - Harbor project name (e.g., salvage_bot)" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- \`DOCKER_REGISTRY_PASSWORD\` - registry password/token" >> $GITHUB_STEP_SUMMARY
|
echo "- \`DOCKER_REGISTRY_USERNAME\` - Harbor username (preferably robot account)" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- \`DOCKER_REGISTRY_PASSWORD\` - Harbor password/token" >> $GITHUB_STEP_SUMMARY
|
||||||
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
||||||
echo "- **PR Number:** #${{ github.event.number }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **PR Number:** #${{ github.event.number }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Action:** Build only (no push for PR)" >> $GITHUB_STEP_SUMMARY
|
echo "- **Action:** Build only (no push for PR)" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|||||||
52
HARBOR_SETUP_INSTRUCTIONS.md
Normal file
52
HARBOR_SETUP_INSTRUCTIONS.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# Настройка Harbor Registry для Gitea Actions
|
||||||
|
|
||||||
|
## Быстрая настройка
|
||||||
|
|
||||||
|
### 1. Создайте Robot Account в Harbor
|
||||||
|
|
||||||
|
1. Откройте Harbor UI: `https://reg.ddl.su`
|
||||||
|
2. Войдите в проект `salvage_bot`
|
||||||
|
3. Перейдите в **Robot Accounts** → **New Robot Account**
|
||||||
|
4. Настройте:
|
||||||
|
- **Name**: `gitea-ci` (или любое удобное имя)
|
||||||
|
- **Expiration**: выберите подходящий срок
|
||||||
|
- **Permissions**: отметьте `Push Artifact` и `Pull Artifact`
|
||||||
|
5. Скопируйте:
|
||||||
|
- **Username**: `robot$gitea-ci` (автогенерируется)
|
||||||
|
- **Token**: сгенерированный токен
|
||||||
|
|
||||||
|
### 2. Настройте секреты в Gitea
|
||||||
|
|
||||||
|
В настройках репозитория добавьте секреты:
|
||||||
|
|
||||||
|
```
|
||||||
|
DOCKER_REGISTRY_URL = reg.ddl.su
|
||||||
|
DOCKER_REGISTRY_PROJECT = salvage_bot
|
||||||
|
DOCKER_REGISTRY_USERNAME = robot$gitea-ci
|
||||||
|
DOCKER_REGISTRY_PASSWORD = <сгенерированный токен>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Запустите workflow
|
||||||
|
|
||||||
|
После настройки секретов workflow будет автоматически:
|
||||||
|
- Собирать Docker образ
|
||||||
|
- Логиниться в Harbor
|
||||||
|
- Пушить образ с правильными тегами
|
||||||
|
|
||||||
|
## Проверка результата
|
||||||
|
|
||||||
|
После успешного выполнения workflow образ будет доступен:
|
||||||
|
```
|
||||||
|
reg.ddl.su/salvage_bot/salvagedb-bot:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Устранение проблем
|
||||||
|
|
||||||
|
### Ошибка 400 Bad Request
|
||||||
|
- Проверьте правильность robot account credentials
|
||||||
|
- Убедитесь что robot account имеет права на проект
|
||||||
|
- Проверьте что все 4 секрета настроены корректно
|
||||||
|
|
||||||
|
### Ошибка 403 Forbidden
|
||||||
|
- Robot account не имеет прав Push Artifact
|
||||||
|
- Проект `salvage_bot` недоступен для robot account
|
||||||
@ -1,22 +1,14 @@
|
|||||||
# Harbor Registry Tag Format Fix
|
# Harbor Registry Tag Format Fix
|
||||||
|
|
||||||
## Проблема
|
## Проблема
|
||||||
Ошибка в формате тегов Docker образов для Harbor registry. Harbor ожидает формат:
|
Ошибка в формате тегов Docker образов для Harbor registry и проблемы с аутентификацией. Harbor ожидает формат:
|
||||||
```
|
```
|
||||||
reg.ddl.su/salvage_bot/REPOSITORY[:TAG]
|
reg.ddl.su/project/repository[:TAG]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Исправление
|
## Исправление
|
||||||
|
|
||||||
### До (неправильно):
|
### Структура Harbor тегов:
|
||||||
```yaml
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: salvagedb/salvagedb-bot # содержит лишний slash
|
|
||||||
|
|
||||||
# Генерировал теги вида: reg.ddl.su/salvagedb/salvagedb-bot:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
### После (правильно):
|
|
||||||
```yaml
|
```yaml
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: salvagedb-bot # только имя репозитория
|
IMAGE_NAME: salvagedb-bot # только имя репозитория
|
||||||
@ -28,16 +20,49 @@ env:
|
|||||||
|
|
||||||
Harbor использует трёхуровневую структуру:
|
Harbor использует трёхуровневую структуру:
|
||||||
1. **Registry URL**: `reg.ddl.su`
|
1. **Registry URL**: `reg.ddl.su`
|
||||||
2. **Project/Namespace**: `salvage_bot` (уже включен в настройках Harbor)
|
2. **Project/Namespace**: `salvage_bot` (указывается в DOCKER_REGISTRY_PROJECT)
|
||||||
3. **Repository**: `salvagedb-bot` (указывается в IMAGE_NAME)
|
3. **Repository**: `salvagedb-bot` (указывается в IMAGE_NAME)
|
||||||
|
|
||||||
Конечный формат: `registry_url/project/repository:tag`
|
Конечный формат: `registry_url/project/repository:tag`
|
||||||
|
|
||||||
|
## Требуемые секреты Gitea
|
||||||
|
|
||||||
|
Для корректной работы с Harbor необходимо настроить следующие секреты:
|
||||||
|
|
||||||
|
- `DOCKER_REGISTRY_URL`: `reg.ddl.su`
|
||||||
|
- `DOCKER_REGISTRY_PROJECT`: `salvage_bot` (название проекта в Harbor)
|
||||||
|
- `DOCKER_REGISTRY_USERNAME`: username или robot account
|
||||||
|
- `DOCKER_REGISTRY_PASSWORD`: пароль или токен robot account
|
||||||
|
|
||||||
|
## Рекомендации по аутентификации
|
||||||
|
|
||||||
|
### Robot Account (настоятельно рекомендуется)
|
||||||
|
|
||||||
|
1. В Harbor UI перейдите в Project → Robot Accounts
|
||||||
|
2. Создайте robot account с правами `push` и `pull`
|
||||||
|
3. Используйте имя robot account в формате `robot$username`
|
||||||
|
4. Используйте сгенерированный токен как пароль
|
||||||
|
|
||||||
|
### Преимущества robot account:
|
||||||
|
- Безопаснее для CI/CD (ограниченные права)
|
||||||
|
- Можно отозвать без влияния на основной аккаунт
|
||||||
|
- Чёткое разграничение доступа
|
||||||
|
|
||||||
|
## Устранение ошибок
|
||||||
|
|
||||||
|
### 400 Bad Request при OAuth токене
|
||||||
|
|
||||||
|
Наиболее частые причины:
|
||||||
|
- Неправильный формат username (для robot account должен начинаться с `robot$`)
|
||||||
|
- Некорректный токен или пароль
|
||||||
|
- Отсутствие прав на проект в Harbor
|
||||||
|
- Отсутствие PROJECT_NAME в пути тега
|
||||||
|
|
||||||
## Изменения в файлах
|
## Изменения в файлах
|
||||||
|
|
||||||
- ✅ `.gitea/workflows/docker-build-local.yml` - исправлен формат тегов
|
- ✅ `.gitea/workflows/docker-build-local.yml` - добавлен PROJECT_NAME
|
||||||
- ✅ Убрано лишнее `/salvagedb/` из пути
|
- ✅ Исправлен формат тегов: `registry/project/repository:tag`
|
||||||
- ✅ Добавлена нормализация URL (убирает https:// если есть)
|
- ✅ Добавлена поддержка DOCKER_REGISTRY_PROJECT секрета
|
||||||
- ✅ Обновлена документация в Summary
|
- ✅ Обновлена документация в Summary
|
||||||
|
|
||||||
## Тестирование
|
## Тестирование
|
||||||
@ -47,5 +72,12 @@ Harbor использует трёхуровневую структуру:
|
|||||||
- `reg.ddl.su/salvage_bot/salvagedb-bot:main`
|
- `reg.ddl.su/salvage_bot/salvagedb-bot:main`
|
||||||
- `reg.ddl.su/salvage_bot/salvagedb-bot:v1.0.0`
|
- `reg.ddl.su/salvage_bot/salvagedb-bot:v1.0.0`
|
||||||
|
|
||||||
Вместо неправильных:
|
## Проверка доступности
|
||||||
- ~~`reg.ddl.su/salvagedb/salvagedb-bot:latest`~~ ❌
|
|
||||||
|
```bash
|
||||||
|
# Тест локальной авторизации
|
||||||
|
docker login reg.ddl.su -u YOUR_USERNAME
|
||||||
|
|
||||||
|
# Или для robot account
|
||||||
|
docker login reg.ddl.su -u robot$YOUR_ROBOT_NAME
|
||||||
|
```
|
||||||
Loading…
x
Reference in New Issue
Block a user