![](/img/trans.png)
[英]Using Kaniko cache with Google Cloud Build for Google Cloud Kubernetes Deployments
[英]Compiling protobuf messages using python plugin within Google Cloud Build
我已經處理這個問題幾個星期了,我急需幫助。 因此,提前感謝您對如何將 protobufs 編譯成 pb2.py 文件的任何見解,以便在 Google Cloud Build 期間您的工作區的 rest 可以訪問它們。
到目前為止的嘗試:
我首先嘗試使用 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
接下來,我嘗試使用可安裝的 grpcio-tools python package pip 來編譯原型。 這要成功得多,因為我實際上能夠生成 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 上執行相同的過程,一切都會正常進行。 我只是不明白文件如何存在但不可導入。
更新:我通過使我的 protobufs 目錄(即本例中的 protos)成為 pip 可安裝 package 來解決這個問題,因為 pip 安裝似乎正確地將包添加到雲構建環境中的 PATH。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.