Двойная пометка образов докера (последняя + заданная версия) + развернуть последнюю версию на k8s + затем поискать реальную метку? - PullRequest
0 голосов
/ 26 мая 2018

Я хочу дважды пометить образы докеров (последняя + версия, например, 1.3.0-78) во время сборки / запуска докера.

Затем я хочу развернуть все свои приложения в kubernetes с последним тегом,если тесты пройдут, найдите «настоящий» тег (1.3.0-78) из дайджеста изображения, который я могу получить из kubernetes, связанного с «последним», а затем создайте манифест всех тегов докера в качестве кандидата на выпуск.

К сожалению, я не нашел хорошего способа найти "настоящий" тег, основанный только на дайджесте.

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

Вот скрипт, который находит все теги с одинаковым дайджестом, но он очень медленный:

REPOSITORY=$1
TARGET_TAG=$2


# find all tags
ALL_TAGS=$(curl -s  $REPOSITORY/tags/list | jq -r .tags[])

# get image digest for target
TARGET_DIGEST=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json"   $REPOSITORY/manifests/$TARGET_TAG | grep Docker-Content-Digest | cut -d ' ' -f 2)

# for each tags
for tag in ${ALL_TAGS[@]}; do
  echo "checking tag ${tag}"
  # get image digest
  digest=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json" $REPOSITORY/manifests/$tag | grep Docker-Content-Digest | cut -d ' ' -f 2)

  # check digest
  if [[ $TARGET_DIGEST = $digest ]]; then
    echo "$tag $digest"
  fi
done

У кого-нибудь есть другой подход?

1 Ответ

0 голосов
/ 26 мая 2018

Затем я хочу развернуть все свои приложения в kubernetes с последним тегом

Нет, вы, скорее всего, этого не сделаете;вы хотите создать то, что GitLab называет средой , используя образ кандидата-релиза, а затем продвинуть RC в реальный Deployment, если все пойдет хорошо.Использование :latest - это путь к катастрофе практически во всех обстоятельствах.

Если вы настаиваете на использовании :latest, то я бы предложил поместить «реальный» тег изображения в аннотацию,метка или переменная окружения временного Deployment, чтобы вы могли получить эту информацию позже, не только для вашего здравого смысла, но и сделать ее доступной для процесса, который предположительно разрушает временный стек и продвигает изображение в производствостек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...