在构建Docker映像的同时授予对Google Build的Google存储桶的访问权限

时间:2019-06-15 08:33:57

标签: google-cloud-platform google-cloud-storage google-cloud-build

我是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 accountstorage legacy bucket readerstorage legacy object readerstorage object viewer添加在一起,没有太大的成功。

我显然做错了。但是我不清楚:

  • 此链接格式仅在控制台中有效,我应该使用其他URL来获取此文件
  • 权限配置错误
  • 我仍然必须通过curl处理一些http授权
  • 我正在忽略其他事物。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

经过长时间的研究,尝试并出错,我设法找到了一种好的方法。这是那些可能需要重现类似设置以及我未来的人的食谱。

RUN curl https://sdk.cloud.google.com | bash > /dev/null
ENV PATH="${PATH}:/root/google-cloud-sdk/bin"
  • 现在,在docker文件中由RUN ./myscript.sh运行的shell脚本中,您将添加:
    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