При просмотре изображений в реестре артефактов Google Cloud Platform отображается столбец «Обновленное время». Однако всякий раз, когда я создаю тот же образ и нажимаю его снова, он создает новый образ.
В рамках процесса сборки облака я извлекаю этот образ на основе Ruby, обновляю драгоценные камни, а затем отправляю его обратно в реестр артефактов для использования на более поздних этапах сборки (миграция БД, модульные тесты). Я надеюсь, что после обновления гемов Ruby в большинстве случаев ничего не произойдет, что приведет к идентичному образу Docker. В таком случае я бы не ожидал, что новые слои будут добавлены. Однако каждый раз, когда я строю, всегда добавляется новый слой и, следовательно, новый Артефакт.
Таким образом, проблема может заключаться в том, как работает gcr.io/cloud-builders/gsutil
Cloud Build, а не в самом реестре артефактов. Вот мои соответствующие шаги по сборке, если это имеет значение:
- id: update_gems
name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/{my repo}/{my image}:deploy',
'-f', 'docker/bundled.Dockerfile', '.' ]
- id: update_image
name: 'gcr.io/cloud-builders/docker'
args: [ 'push', 'us-central1-docker.pkg.dev/$PROJECT_ID/{my repo}/{my image}:deploy' ]
Первый шаг относится к bundled.Dockerfile, который имеет следующее содержимое:
FROM us-central1-docker.pkg.dev/{same project as above}/{my repo}/{my image}:deploy
WORKDIR /workspace
RUN bundle update
RUN bundle install
Есть ли способ выполнить то, что я сейчас делаю (например, обновить контейнер времени развертывания, используемый для запуска rspec
тестов и запустить rake db:migrate
без создания новых изображений при каждой сборке? Я предполагаю, что эти изображения занимают место, и я получать за это счет. Я предполагаю, что есть способ обновить существующее изображение в реестре артефактов поскольку есть обновленный столбец.