Некоторые категории команд работают с Docker registry, и требуют соответствующей авторизации:

Поддерживаемые имплементации

  Build Cleanup
AWS ECR ок ок (с нативным API)
Azure CR ок ок (с нативным API)
Default ок ок
Docker Hub ок ок (с нативным API)
GCR ок ок
GitHub Packages ок ок (с нативным API и только в приватных GitHub репозиториях)
GitLab Registry ок ок
Harbor ок ок
JFrog Artifactory ок ок
Quay ок ок

В ближайшее время планируется добавить поддержку для Nexus Registry

Следующие имплементации полностью поддерживаются и от пользователя требуется только выполнить авторизацию Docker:

  • Default.
  • GCR.
  • GitLab Registry.
  • Harbor.

Azure CR, AWS ECR, Docker Hub и GitHub Packages имплементации поддерживают Docker Registry API, но не полностью. Для перечисленных имплементаций необходимо использовать нативное API для удаления тегов. Поэтому при очистке для werf может потребоваться дополнительные пользовательские данные.

AWS ECR

Хранение образов в AWS ECR не отличается от остальных имплементаций, но пользователь должен самостоятельно создать репозитории перед использованием werf.

werf использует AWS SDK для удаления тегов, поэтому перед использованием команд очистки пользователь должен:

Azure CR

Для того, чтобы werf начал удалять теги, пользователю необходимо выполнить следующие шаги:

  • Установить Azure CLI (az).
  • Выполнить авторизацию (az login).

Для удаления тегов пользователь должен иметь одну из следующих ролей: Owner, Contributor или AcrDelete (подробнее Azure CR roles and permissions)

Docker Hub

Для чистки тегов в Docker Hub репозитории werf использует Docker Hub API и для работы требуются дополнительные параметры.

Пользователь должен определить token или username и password.

Используя следующий скрипт, пользователь может получить token самостоятельно:

HUB_USERNAME=USERNAME
HUB_PASSWORD=PASSWORD
HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${HUB_USERNAME}'", "password": "'${HUB_PASSWORD}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)

В качестве токена нельзя использовать personal access token, т.к. удаление ресурсов возможно только при использовании основных учётных данных

Для того, чтобы задать параметры, следует использовать следующие опции или соответствующие переменные окружения:

  • --repo-docker-hub-token или
  • --repo-docker-hub-username и --repo-docker-hub-password.

GitHub Packages

Для удаления версий package приватного репозитория используется GraphQL. От пользователя требуется token с read:packages, write:packages, delete:packages и repo scopes.

GitHub не поддерживает удаление версий package в публичных репозиториях

Для того, чтобы задать параметры, следует использовать опцию --repo-github-token или соответствующую переменную окружения.

Авторизация Docker

Все команды, требующие авторизации в Docker registry, не выполняют ее сами, а используют подготовленную конфигурацию Docker.

Конфигурация Docker — это папка, в которой хранятся данные авторизации используемые для доступа в различные Docker registry и другие настройки Docker. По умолчанию, werf использует стандартную для Docker папку конфигурации: ~/.docker. Другую используемую папку конфигурации можно указать с помощью параметра --docker-config, либо с помощью переменных окружения $DOCKER_CONFIG или $WERF_DOCKER_CONFIG. Все параметры и опции в файле конфигурации стандартны для Docker, их список можно посмотреть с помощью команды docker --config.

Для подготовки конфигурации Docker вы можете использовать команду docker login, либо, если вы выполняете werf в рамках CI-системы, вызвать команду werf ci-env (более подробно о подключении werf к CI-системам читай в соответствующем разделе).

Использование docker login при параллельном выполнении заданий в CI-системе может приводить к ошибкам выполнения заданий из-за работы с временными правами и состояния race condition (одно задание влияет на другое, переопределяя конфигурацию Docker). Поэтому, необходимо обеспечивать независимую конфигурацию Docker между заданиями, используя docker --config или werf ci-env