🌐 Как составить список образов Docker в реджестри GitLab

Как перечислить список образов Docker в реестре GitLab

by itisgood
Список образов Docker в реджестри GitLab.
Этот метод напрямую обращается к реджестри GitLab.
Создайте персональный токен доступа с областью read_registry.
Создайте shell скрипт, который будет использоваться для доступа к реестру GitLab.
Для этого потребуются утилиты командной строки curl и jq.
#!/usr/bin/env bash
# Display GitLab registry containers
#
# Create Personal Access Token with read_registry scope
#
# Define shell variables:
#   export GITLAB_USERNAME=milosz
#   export GITLAB_TOKEN="glpat-qhP3QBpSMXLUysvserXY"
#   export GITLAB_ADDRESS="https://gitlab.example.org"
#   export GITLAB_REGISTRY_ADDRESS="https://registry.example.org"

# Check required shell variables
if [ -n "$GITLAB_USERNAME" ] && [ -n "$GITLAB_TOKEN" ] && [ -n "$GITLAB_ADDRESS" ]; then
  # Check GitLab and its registry addresses
  curl --output /dev/null --silent --head --fail "$GITLAB_ADDRESS" || { echo "GitLab is not responding"; exit 1; }
  curl --output /dev/null --silent --head --fail "$GITLAB_REGISTRY_ADDRESS" || { echo "Registry is not responding"; exit 1; }

  # Get JWT token that grants access to registry catalog
  token="$(curl --silent --request GET --user "${GITLAB_USERNAME}:${GITLAB_TOKEN}" \
                "${GITLAB_ADDRESS}/jwt/auth?service=container_registry&scope=registry:catalog:*" | \
           jq --raw-output .token)"

  if [ -n "$token" ] && [ "$token" != "null" ]; then
    # Get repositories
    repositories="$(curl --silent --header "Authorization: Bearer $token" \
                         "${GITLAB_REGISTRY_ADDRESS}/v2/_catalog" | \
                    jq --raw-output ".repositories[]")"

    for repository in $repositories; do
      echo "Repository: $repository"

      # Get JWT token that grants pull access to the specific repository
      token="$(curl --silent --request GET --user "${GITLAB_USERNAME}:${GITLAB_TOKEN}" \
                    "${GITLAB_ADDRESS}/jwt/auth?service=container_registry&scope=repository:{$repository}:pull" | \
               jq --raw-output .token)"

      if [ -n "$token" ] && [ "$token" != "null" ]; then
        # Get tags
        tags="$(curl --silent --header "Authorization: Bearer $token" \
                     "https://registry.awesomebeastie.eu/v2/${repository}/tags/list" | \
                jq --raw-output .tags[])"

          echo "Tagged:"
        for tag in $tags; do
            echo "  - $tag"
        done
        echo
      else
        echo "Unable to retrieve the JWT token. Please verify your credentials and try again."
      fi
    done
  else
    echo "Unable to retrieve the JWT token. Please verify your credentials and try again."
  fi
fi
Экспортируйте необходимые переменные оболочки.
export GITLAB_USERNAME=milosz
export GITLAB_TOKEN="glpat-qhP3QBpSMXLUysvserXY"
export GITLAB_ADDRESS="https://gitlab.example.org"
export GITLAB_REGISTRY_ADDRESS="https://registry.example.org"

Выполните его.

$ inspect_registry.sh 
Repository: containers/ansible
Tagged:
  - 9.3.0

Repository: containers/hugo
Tagged:
  - 0.122.0-r0
  - latest

Repository: containers/rust
Tagged:
  - 1.76.0-alpine

Repository: sandbox/alpine-cache-nexus
Tagged:
  - utilities

Repository: sandbox/alpine-cache
Tagged:
  - basic
  - utilities

API GitLab предлагает дополнительные подробности, которые мы рассмотрим позже.

см. также:

🦊 GitLab настройка 2FA для всех пользователей

 

 

You may also like

Leave a Comment