我是Google云服务的新手,我正在尝试为我的产品设置自动版本,需要下载大量文件。
我想在Docker构建过程中从专用的Google Storage存储桶下载文件。为此,我在Dockerfile
中添加了以下行:
RUN curl https://storage.cloud.google.com/[bucketname]/[filename] -o [filename]
由于该存储桶中的文件不应公开访问,因此我禁用了对象级别权限,并在[ProjectID]@cloudbuild.gserviceaccount.com
右侧添加了成员Storage Object Viewer
。
但是当docker文件脚本运行时,下载的文件为空
Step 7/9 : RUN curl https://storage.cloud.google.com/[bucketname]/[filename] -o [filename]
---> Running in 5d1a5a1bbe87
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Removing intermediate container 5d1a5a1bbe87
---> 42938a9cc8d1
Step 8/9 : RUN ls -l [filename]
---> Running in 34ac112051a1
-rw-r--r-- 1 root root 0 Jun 15 00:37 [filename]
如果我登录google.console并通过我的导航器访问此链接,则该链接会很好地工作。
我尝试更改权限设置,最终将cloud build account
,storage legacy bucket reader
,storage legacy object reader
,storage object viewer
添加在一起,没有太大的成功。
我显然做错了。但是我不清楚:
感谢您的帮助:)
答案 0 :(得分:1)
经过长时间的研究,尝试并出错,我设法找到了一种好的方法。这是那些可能需要重现类似设置以及我未来的人的食谱。
gcloud iam service-accounts keys create ~/key.json --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
RUN curl https://sdk.cloud.google.com | bash > /dev/null
ENV PATH="${PATH}:/root/google-cloud-sdk/bin"
RUN ./myscript.sh
运行的shell脚本中,您将添加:
gcloud auth activate-service-account [ACCOUNT] --key-file=~/key.json
(https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account)激活服务帐户TOKEN=`gcloud auth print-access-token [ACCOUNT]`
(https://cloud.google.com/sdk/gcloud/reference/auth/print-access-token)生成与此帐户关联的身份验证令牌RUN curl -L -H "Authorization: Bearer [TOKEN]" https://www.googleapis.com/storage/v1/b/[bucketname]/o/[objectname]?alt=media -o filename
我没有使用gcloud cp gs://bucketname/bucketfile ./
,因为python2
在我的Docker映像中不可用,并且Google不支持python3。祝贺您自己吃一个巧克力蛋糕或含糖的点心。 (:
奖金:如果像我一样,您的docker构建超时,则必须在cloudbuild.yaml
旁边添加一个Dockerfile
。这是我用于构建的通用文件:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID', '.' ]
images:
- 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID'
timeout: 900s