带有 python 入口点的 Google Cloud Build gsutil
Posted
技术标签:
【中文标题】带有 python 入口点的 Google Cloud Build gsutil【英文标题】:Google Cloud Build gsutil with python entrypoint 【发布时间】:2021-02-01 15:20:42 【问题描述】:我想使用 Python 脚本从 Google Storage 下载多个文件,方法是在 Cloud Build 步骤期间通过 Python 脚本中的 subprocess.check_call()
调用 gsutil
。
因此,我在cloudbuild.yaml
中使用以下步骤:
- name: 'gcr.io/cloud-builders/gsutil'
entrypoint: 'bash'
args: ['-c',
'pip install google-cloud-storage && python /path_to_script/script.py --arg1 $_ARG1 --arg2 $TAG_NAME --arg3 $BRANCH_NAME --arg4 $_ARG4'
]
但是 Cloud Build 会抛出一个奇怪的 SyntaxError: invalid syntax
Python 错误。我可以在本地运行具有相同参数的相同 Python 脚本以及,方法是在 Cloud Build 中使用 python:3.7-sim
并带有 SyntaxError:
- name: 'python:3.7-slim'
entrypoint: /bin/sh
args: ['-c',
'pip install google-cloud-storage && python python /path_to_script/script.py --arg1 $_ARG1 --arg2 $TAG_NAME --arg3 $BRANCH_NAME --arg4 $_ARG4'
]
后面的示例在调用 gsutil
之前一直有效,因为它不是 python:3.7-slim
容器的一部分(因此是预期的行为)。
任何帮助 cmets 为什么gcr.io/cloud-builders/gsutil
会抛出该错误?入口点是否指定错误?
【问题讨论】:
你在脚本中做了什么? 脚本拉取存储桶中所有文件的列表,并根据一些用户输入过滤它们(在云构建中使用替换变量)。然后,将文件下载到云构建中的当前工作区。有趣的是,脚本在函数定义的开头就中断了。如前所述,脚本本身在本地运行以及在 python:3.7-slim 容器中运行。 我无法重现您的错误。这就是为什么我想了解你为失败所做的特殊事情。如果您有最少的代码来重现该问题,那就完美了! 【参考方案1】:我找到了一个更简单的解决方案,即调用专用的gsutil
图像并结合通配符来完成与 python 脚本中类似的过滤。
请参见下面的简化示例:
- name: 'gcr.io/cloud-builders/gsutil'
entrypoint: 'bash'
args:
- '-c'
- |
gsutil -m cp -r 'gs://bucket/*/' '/workspace'
这实际上对我来说做得很好。
【讨论】:
以上是关于带有 python 入口点的 Google Cloud Build gsutil的主要内容,如果未能解决你的问题,请参考以下文章
Google App Engine:在 Python 中使用自定义入口点