У меня есть конвейер CI в Github Actions, который создает и отправляет образ докера, затем у меня есть отдельный репозиторий, в котором есть действие, которое я запускаю из командной строки, которое принимает в качестве аргумента образ докера, который затем применяет его к Kustomize. шаблон
Вот пример этого CI
docker build . -t ghcr.io/myOrg/myApp:${{ commitSha }}
docker push ghcr.io/myOrg/myRepo:${{ commitSha }}
gh workflow run update_image.yml -R myOrg/myInfraRepo -f image=ghcr.io/myOrg/myRepo@$(docker images --no-trunc --quiet ghcr.io/myOrg/myApp:${{ commitSha }})
При тестировании весь поток работает и запускает рабочий процесс с изображением и дайджестом, однако дайджест не кажется правильным.
Когда я проверяю контейнер через пакеты github, я вижу следующий манифест
{
"digest": "sha256:9e32f9292cbe63d27374fd467ad5e530112cbfddf17c250ca90e087bdfcd436e",
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1998,
"config": {
"digest": "sha256:6f7e582643c22f4e41021be851bb0394c0e326e8fe06c7d3e890316d1a0234e9",
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 8755
},
"layers": [
...
Оба дайджеста разные, и вывод docker images --no-trunc --quiet
был дайджестом под config.digest
, а не дайджестом верхнего уровня. Я не понимаю, почему они разные, это дайджест реестра?
Если да, то как я могу получить этот дайджест через командную строку?
Что ж, мне удалось это решить. Я использовал неправильную команду для получения дайджеста.
docker images --no-trunc --quiet ghcr.io/myOrg/myApp:${{ commitSha }}
Это работает, но это только локальный дайджест. Заменил на это из здесь
docker inspect --format='{{index .RepoDigests 0}}' $IMAGE
который возвращает полное имя и удаленный дайджест. Итак, теперь моя последняя команда выглядит так:
gh workflow run update_image.yml -R myOrg/myInfraRepo -f image=$(docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/myOrg/myApp:${{ commitSha }})