gcloud builds не обновляет файл - PullRequest
       59

gcloud builds не обновляет файл

0 голосов
/ 06 февраля 2020

Когда я запускаю команду, gcloud builds submit --tag gcr.io/[MY_TAG] создает изображение и возвращает сообщение об успехе. Однако, когда я запускаю docker run gcr.io/[MY_TAG], я получаю сообщение об ошибке в строке файла, которая существовала прежде, но я удалил ее и заменил на что-то другое.

Я был бы признателен, если бы вы дали мне несколько идей на возможном сценарии ios что gcloud builds submit может не обновлять файл и как заставить его обновить файл в образе.

Обратите внимание, что у меня нет .gcloudignore где-либо в моей папке, файл то, что не обновлено, не существует в .gitignore, и я не могу использовать --no-cache, потому что оно говорит:

ERROR: (gcloud.builds.submit) Invalid value for [no-cache]: Cannot specify --no-cache if builds/use_kaniko property is False

Я проверил последний файл журнала, созданный в gcloud\logs\, и файл что мне нужно обновить обозначено как "Добавлено"!

1 Ответ

2 голосов
/ 07 февраля 2020

Возможно, вы используете тег latest для устранения неоднозначности версий изображений, но это не работает должным образом.

Когда вы docker run ... ${IMAGE}:latest на своем хосте, если тег существует локально, любое изображение имеет тег, будет запущено. Возможно, что GCR :latest обновляется, но вы не используете его, когда запускаете то, что ваш хост имеет как :latest.

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

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

gcloud builds submit \
--tag=gcr.io/${PROJECT}/test \
--project=${PROJECT}
...
latest: digest: 
sha256:e5773d45cc5dce21d78f276f87928ab47373b65ef10786722a38b22918e69d7e size: 524
DONE

gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST        TAGS    TIMESTAMP
e5773d45cc5d  latest  2020-02-06T17:21:27

Если мы снова отправим сборку, тег :latest перейдет к новому изображению:

gcloud builds submit \
--tag=gcr.io/${PROJECT}/test \
--project=${PROJECT}
...
latest: digest: 
sha256:ab9fc60674a0e854e553baa06666c898426baec9d8d2ead0ff8513dbab960d2c size: 524
DONE

gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST        TAGS    TIMESTAMP
ab9fc60674a0  latest  2020-02-06T17:23:48
e5773d45cc5d          2020-02-06T17:21:27

Вы можете запустить контейнер из указанного c дайджеста изображения таким образом:

docker run \
--rm --interactive --tty \
gcr.io/${PROJECT}/test@sha256:e5773d45cc5dce21d78f276f87928ab47373b65ef10786722a38b22918e69d7e

docker run \
--rm --interactive --tty \
gcr.io/${PROJECT}/test@sha256:ab9fc60674a0e854e553baa06666c898426baec9d8d2ead0ff8513dbab960d2c

Альтернативный подход, который зависит от того, используете ли вы отдельные теги (и не так хорош, как использование дайджестов с практически гарантированным выделением):

gcloud builds submit --tag=gcr.io/${PROJECT}/test:v3 --project=${PROJECT}
gcloud builds submit --tag=gcr.io/${PROJECT}/test:v4 --project=${PROJECT}

gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST        TAGS    TIMESTAMP
5946f2e093af  v4      2020-02-06T17:28:36
f03c9609c101  v3      2020-02-06T17:28:17
ab9fc60674a0  latest  2020-02-06T17:23:48
e5773d45cc5d          2020-02-06T17:21:27

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

Давайте потянем изображение, которое в настоящее время (!) Соответствует :v4:

docker pull gcr.io/${PROJECT}/test:v4
Digest: sha256:5946f2e093afbe203691cdc8a3e592db7b3e1d010619c4c97c3084de299f4d06

docker image ls
REPOSITORY                               TAG      IMAGE ID
gcr.io/dazwilkin-200206-60102073/test    v4       a1bb9204b417

Создайте изображение с повторным использованием (!) :v4 и снова потяните его:

gcloud builds submit --tag=gcr.io/${PROJECT}/test:v4 --project=${PROJECT}
Digest:
sha256:e128e4fe3d61fee0c995e9ac2cd1f05635fbdc017f32eb3116fdb593826674cc

gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST        TAGS    TIMESTAMP
e128e4fe3d61  v4      2020-02-06T17:36:59
5946f2e093af          2020-02-06T17:28:36
f03c9609c101  v3      2020-02-06T17:28:17
ab9fc60674a0  latest  2020-02-06T17:23:48
e5773d45cc5d          2020-02-06T17:21:27

NB Как тег :v4 перешел на новый дайджест (e128... ).

Но изображение с тегом :v4 локально - это старое изображение (5946...).

Это только когда мы (не забудьте) снова потянуть изображение с тегом :v4 что мы извлечем то, что в настоящее время помечено как :v4 в GCR.

docker pull gcr.io/${PROJECT}/test:v4
Digest: sha256:e128e4fe3d61fee0c995e9ac2cd1f05635fbdc017f32eb3116fdb593826674cc
Status: Downloaded newer image for gcr.io/dazwilkin-200206-60102073/test:v4

docker image ls
REPOSITORY                                TAG      IMAGE ID
gcr.io/dazwilkin-200206-60102073/test     v4       6a916f95586a 

NB Тот же тег (:v4), но дайджесты (ха sh) уникальны к изображениям.

HTH!

...