Как проверить, существует ли тег image: в реестре контейнеров gitlab

Я знаю, что это можно сделать с dockerhub. Я хочу знать, есть ли что-то подобное для реестра gitlab.

Сценарий использования состоит в том, что я написал сценарий структуры для возврата развертывания к конкретному тегу, предоставленному пользователем. Прежде чем фактически загружать изображения, я хочу узнать, существует ли изображение с указанным тегом в реестре, и соответствующим образом предупредить пользователя.

Я искал в их документации, но ничего не нашел.

Примечание. Пользователь - это человек, который развертывает код.


person Dineshs91    schedule 05.12.2017    source источник
comment
Ознакомьтесь с GitLab 13.0 (май 2020 г.): в GitLab нет графического интерфейса для поиска изображений докеров. См. мой отредактированный ответ ниже.   -  person VonC    schedule 23.05.2020


Ответы (3)


Если GitLab Container Registry не поддерживает вид curl dockerhub естьv1/repositories/$1/tags/$2), я сомневаюсь, что он предлагает эту функцию.

Например, проблема 26866 «Список доступных изображений в реестре GitLab / поиск» открыт через 10 месяцев.

Обновление для GitLab 12.2 (апрель 2019 г., 18 месяцев спустя)

После проработки реализации, имело смысл создать две конечные точки:

  • GET /groups/:id/registry/repositories - возвращает список всех репозиториев контейнеров Docker для всех проектов в группе, аналогично GET /projects/:id/registry/repositories

а также

  • GET /groups/:id/registry/repositories/tags - возвращает список всех репозиториев контейнеров Docker для всех проектов в группе, включая все теги для каждого репозитория контейнеров. Ответ будет выглядеть примерно так:

Так что это может помочь проверить, существует ли image:tag.


Обновите GitLab 13.0 (май 2020 г.)

Используйте поиск, чтобы быстро находить и находить изображения, размещенные в реестре контейнеров GitLab.

Когда вы или кто-то из вашей команды публикуете образ в реестре контейнеров GitLab, вам нужен способ быстро найти его и убедиться, что образ был создан правильно.
Если вы используете GitLab CI / CD для публикации образов с каждой сборкой , было очень сложно эффективно найти изображение в текущем пользовательском интерфейсе. Вместо этого вы полагались на командную строку или API.

Мы рады сообщить, что в версии 13.0 мы добавили функцию поиска в реестр контейнеров GitLab.

Просто перейдите в реестр вашего проекта или группы и введите имя изображения, чтобы увидеть список всех ваших изображений.

https://docs.gitlab.com/ee/user/packages/container_registry/img/container_registry_repositories_with_quickstart_v13_0.png

См. документацию и проблема.

person VonC    schedule 05.12.2017

Обновление: я добавил решение, которое работает без доступа к серверу докеров (непривилегированный режим) ниже.

Хорошо, вот решение, которое я придумал, используя образ docker: stable, включив экспериментальные клиентские функции.

mkdir -p ~/.docker
"echo '{\"experimental\": \"enabled\"}' > ~/.docker/config.json"
docker  login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
docker  manifest inspect $IMGNAME:$IMGTAG > /dev/null && exit || true

exit завершает сценарий сборки, если этот тег уже существует. Также вы должны знать, что ~/.docker/config.json перезаписывается. По этой же причине вход в систему должен происходить позже.

Обновление: вместо записи в конфигурацию можно также установить для переменной среды DOCKER_CLI_EXPERIMENTAL значение enabled. Таким образом, первые две строки можно заменить на export DOCKER_CLI_EXPERIMENTAL=enabled

Обновление: если у вас не включен привилегированный режим и, следовательно, нет доступа к docker-daemon, вы можете использовать сценарии реестра-api, предоставленные harbor (обратите внимание, что это python2.). Это удобно, если вы создаете образ докера с помощью kaniko, где нет доступа к демону докера. нужный.

person Morty    schedule 29.08.2018
comment
Помните, что вы можете использовать стабильную версию, но по-прежнему включаете экспериментальные функции, из которых docker manifest inspect является одной из них. - person Mark Tickner; 03.09.2018
comment
@MarkTickner Да, вы правы, но я не думаю, что это реальная проблема, поскольку, хотя параметры командной строки могут измениться, я не думаю, что функциональность будет удалена. - person Morty; 03.09.2018
comment
В Ubuntu 19.04 вы получаете сообщение об ошибке «Проверка манифеста докеров поддерживается только на Docker cli с включенными экспериментальными функциями cli». - person Torsten Bronger; 24.10.2019
comment
@TorstenBronger: Вы внимательно посмотрели на вторую строку? - person Morty; 29.10.2019
comment
@morty Да, но при запуске вашего мини-скрипта появилось это сообщение об ошибке. - person Torsten Bronger; 29.10.2019
comment
@TorstenBronger: Это действительно странно. Вы используете ванильное изображение или делаете что-то волшебное, например, меняете пользователя или другие настройки? - person Morty; 12.11.2019

Можно использовать Gitlab API.

tag=tag_name
image=image_name
private_token=gitlab_private_token
project=project_number
repo_id=$(curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories" | jq -c --arg regex ".*\\$image$" '.[] | select(.path | test($regex))'.id)

if [ $( curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories/$repo_id/tags/$tag" | jq -r '.name' ) == "$tag" ] ; then
  echo "$tag exists"
else
  echo "$tag does not exist"
fi
person fparaggio    schedule 09.08.2019
comment
Я обнаружил, что jq regexp не нужен / не работает, но вы можете просто извлечь ключ id прямо вот так: repo_id=$(curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories" | jq '.[0].id') - person Tyler Rick; 28.05.2020
comment
Это не эквивалентно, поскольку игнорирует $image. Правильно должно быть repo_id=$(curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories" | jq '.[] | select(.name==env.image) | .id - person renefritze; 12.11.2020