[英]Can I run a Docker container to use in another Google Cloud Build step?
[英]How can I build a Docker Image in Google Cloud Build and use in later Build Steps?
在我的 Rails 項目中,我在存儲庫中有一個 Docker 圖像,用於數據庫遷移和單元測試。 在運行遷移/測試之前,我可能需要更新圖像上的 gem。 但是,似乎即使在更新 Gems 之后,更新的圖像(未推送到存儲庫,而是在遷移/測試之前的構建步驟中)也無法用於未來的構建步驟。
我的 cloudbuild.yaml 看起來像這樣:
steps:
- id: update_gems
name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', "us-central1-docker.pkg.dev/$PROJECT_ID/myregistry/myimage:deploy",
'--build-arg', 'PROJECT=${PROJECT_ID}', '-f', 'docker/bundled.Dockerfile', '.' ]
- id: db_migration
name: "gcr.io/google-appengine/exec-wrapper"
args: ["-i", "us-central1-docker.pkg.dev/$PROJECT_ID/myregistry/myimage:deploy",
"-e", "RAILS_ENV=${_RAILS_ENV}",
"-e", "INSTANCE_CONNECTION_NAME=${_INSTANCE_CONNECTION_NAME}",
"-s", "${_INSTANCE_CONNECTION_NAME}",
"--", "./bin/rake", "db:migrate"]
- id: unit_test
name: "gcr.io/google-appengine/exec-wrapper"
args: ["-i", "us-central1-docker.pkg.dev/$PROJECT_ID/myregistry/myimage:deploy",
"-e", "RAILS_ENV=test",
"-e", "INSTANCE_CONNECTION_NAME=${_INSTANCE_CONNECTION_NAME}",
"-s", "${_INSTANCE_CONNECTION_NAME}",
"--", "./bin/rspec"]
- id: deploy_to_GAE
name: gcr.io/cloud-builders/gcloud
args: ['app', 'deploy', '--project', '${PROJECT_ID}', 'app.yaml']
第一步中提到的Dockerfile如下所示:
ARG PROJECT
FROM us-central1-docker.pkg.dev/${PROJECT}/myregistry/myimage:deploy
WORKDIR /workspace
ADD Gemfile* ./
RUN bundle update
RUN bundle install
在觸發的 Cloud Build 期間,我看到它更新了 Gems 並創建了一個新的 hash,如下所示:
然后在db_migration
步驟中,我看到它在 Gems 更新之前提取了舊圖像:
這可以在update_gems
步驟日志中驗證,其中預更新的圖像 hash 匹配(即圖像 hash 是新拉的,但尚未更新其 Gems):
我意識到一種解決方法是在構建后推送更新的圖像,這確實有效。 例如,我可以在update_gems
步驟之后添加此步驟:
- id: update_image
name: 'gcr.io/cloud-builders/docker'
args: [ 'push', 'us-central1-docker.pkg.dev/$PROJECT_ID/myregistry/myimage:deploy' ]
然而,它引出了一個問題,為什么新的udate_image
構建步驟可以訪問由update_gems
步驟構建的圖像,而其他未來步驟則不能。
映像存儲在本地 docker 注冊表中,Docker 可以訪問。 這就是為什么您可以使用 Docker 推動它的原因。
但是,當您使用另一個步驟時,例如gcr.io/google-appengine/exec-wrapper
,Docker 不再加載到運行時上下文中,因此本地 docker 注冊表是未知的/不活動的。
所以,解決方案是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.