Работа с OCI / Docker
CodeScoring.Save реализует стандарт OCI Distribution Spec на префиксе /v2/, поддерживая Docker, Helm OCI-чарты и любые другие OCI-артефакты (например, oras).
Proxy-репозиторий
Для образов с одним именем (без слешей) применяется стандартная нормализация Docker Hub library/<image>.
Hosted-репозиторий
URL-схема
Базовая схема — путевая, как требует Docker / OCI:
Дополнительно поддерживается Nexus-совместимая маршрутизация плоских URL (flat-alias). Для совместимых репозиториев <project>/<repository> префикс заменяется коротким алиасом или вовсе опускается.
Настройка клиента
Docker / Podman
docker login
Endpoint /v2/ всегда отвечает 401 с challenge-заголовком WWW-Authenticate: Bearer realm=..., даже если репозиторий допускает анонимное чтение. Это нужно, чтобы Docker-клиент корректно выполнил cycle 401 → retry → 200 и затем при необходимости отправил Basic Auth. Это требование OCI Distribution Spec.
Для CI/CD используйте robot-аккаунт: docker login -u 'sa$<robot-name>' -p '<api-key>' save.example.com. То же самое работает для helm registry login и oras login. Подробнее — в общем разделе Аутентификация.
Helm
CodeScoring.Save принимает Helm-чарты как обычные OCI-артефакты. Push/pull выполняется стандартными командами helm:
Для тестовых стендов без TLS используйте флаг --plain-http (Helm 3.13+):
oras
oras работает с любым OCI-совместимым артефактом — конфигами, политиками, SBOM, бинарями и т. д.:
containerd / nerdctl
Маршрутизация плоских URL
Save поддерживает Nexus-совместимое плоское пространство имён для бесшовной миграции с Nexus / Artifactory: репозиторий можно сконфигурировать с префиксом-алиасом, чтобы он отвечал на запросы без <project>/<repository> в пути.
Применяется longest-prefix matching:
docker pull save.example.com/common/external/golang:1.24.1— попадёт в репозиторий, чей flat-alias =common/external/.docker pull save.example.com/johnny-depp:v1— попадёт в catch-all hosted-репозиторий (если он сконфигурирован).
При создании репозитория с flat-alias указываются параметры flat_alias_prefix и/или is_catch_all. Префиксы валидируются на уникальность.
Миграция URL репозитория
Сценарий использования: миграция Docker-реестра из Nexus / Artifactory на CodeScoring.Save.
Flat-alias-вариант ничего не требует от клиента — старые скрипты, в которых жёстко прописано nexus.host.ru/library/nginx, начинают работать после простой замены хоста.
Устранение неполадок
Проверка /v2/
Проверка эндпоинта токена
В ответе — JSON с полем token, содержащим короткоживущий Docker v2 JWT.
