作为构建过程的一部分,我需要从我的私有gcs桶中下载一些python包并将它们安装为Dockerfile的一部分。这可以使用像这样的多级构建来完成:
FROM google/cloud-sdk:alpine as gcloud
WORKDIR /packages
RUN gsutil cp gs://... /packages
FROM python:3.7.0
COPY --from=gcloud /packages .
但是我有一个大问题,从我的本地机器注入服务帐户,以便gsutil
能够执行复制。我尝试通过ARG
捕获服务帐户json的内容,但由于其json格式,它不能与cloudbuild替换一起工作:
gcloud builds submit . --substitutions _SERVICE_ACCOUNT_CONTENT="$(cat path_to_service_account.json)"
我也考虑了步骤之间的共享卷,但它不适用于docker build
。有什么想法,我怎么能做到这一点与cloudbuild?
我的建议是在Docker Build之外进行此操作,并利用Cloud Build内置的身份验证机制(通过元数据服务器)来下载文件。
在您的云构建步骤
steps:
- name: 'gcr.io/cloud-builders/gsutil'
args: ["cp", "gs://...", "./packages"]
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/<PROJECT_ID>/......', '.' ]
在你的Dockerfile
FROM python:3.7.0
COPY packages/* /packages/
.....
只需授予Cloud Build服务帐户访问您的桶。