带有 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在文件树中创建带有入口点的jar文件?

无法从应用引擎访问 Google 云功能(带有入口控制)

Google App Engine:在 Python 中使用自定义入口点

Python Google Cloud Function 记录严重性和重复项

在具有入口点的应用程序上使用 cProfile

Angular 库二级入口点测试代码覆盖率问题