在 Google Cloud Build 中使用 python 插件编译 protobuf 消息

Posted

技术标签:

【中文标题】在 Google Cloud Build 中使用 python 插件编译 protobuf 消息【英文标题】:Compiling protobuf messages using python plugin within Google Cloud Build 【发布时间】:2021-11-23 09:14:15 【问题描述】:

我已经处理这个问题好几个星期了,急需帮助!因此,提前感谢您对如何将 protobuf 编译为 pb2.py 文件的任何见解,以便在 Google Cloud Build 期间您的工作区的其余部分可以访问它们。

目前的尝试:

    我首先尝试使用 google-cloud-builders,protoc image。我能够成功地将图像推送到构建器项目注册表,但我不确定我是否能够正确安装 python 插件。

    这是我的 cloud_build.yaml 步骤:

    - name: gcr.io/eco-env-238021/protoc
      args:
      - --proto-path=./protos
      - --python_out=./protos
      - ./protos/A.proto
    

    我不断收到错误读数: failed: starting step container failed: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "protoc": executable file not found in $PATH: unknown

    接下来我尝试使用可安装 pip 的 grpcio-tools python 包来编译原型。这更加成功,因为 我实际上能够生成 pb2.py 文件。不过,我的兴奋是短暂的。在云构建期间,我调用了一个导入其中一个 pb2.py 文件的测试文件,我们将其命名为 A。现在,当 A 导入另一个 pb2.py 文件时,我得到一个模块未找到错误,我'统称为B。我已经打印了云构建环境中的目录结构,并且A和B都存在,并且A绝对可以访问B(它们存在于同一个包中)。

目录结构如下:

 C:.
  |   cloudbuild.yaml
  |   __init__.py
  |       
  +---protos
  |       A_pb2.py
  |       B_pb2.py
  |       __init__.py
  |       
  +---tests
  |       test.py
Here is my cloud_build.yaml step:
    - name: python:3.7
      args: ["python", "-m", "grpc_tools.protoc",  "-I", "./protos",
             "--python_out=./protos", "./protots/A.proto"]
    - name: python:3.7
      args: ["python", "-m", "grpc_tools.protoc",  "-I", "./protos",
             "--python_out=./protos", "./protots/B.proto"]

    - name: python:3.7
      args: ["python","-m","unittest","discover","--verbose","-s","./tests/",
            "-p","test.py"]
      id: unittest

模块导入错误可能与 protobuf 文件的编译完全无关,只是云构建环境的一个属性。不过,我确实注意到,如果我在存储库中预编译触发云构建的 protobuf 文件,则一切正常。或者,如果我在 PC 上遵循相同的流程,一切正常。我只是不明白这些文件如何存在但不能导入。

【问题讨论】:

【参考方案1】:

更新:我通过使我的 protobufs 目录(即本例中的 protos)成为 pip 可安装包解决了这个问题,因为 pip installs 似乎正确地将包添加到云构建环境中的 PATH。

【讨论】:

以上是关于在 Google Cloud Build 中使用 python 插件编译 protobuf 消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Cloud Build 上使用 Docker Buildkit

从 Google Cloud Build 访问存储在 Google Secret Manager 中的环境变量

Google Cloud Build 超时

如何通过 Google Cloud Build 中的步骤设置环境或替换变量?

Google Cloud Build 中的环境变量

Google Cloud Build Bitbucket 集成不支持 git 标签