[英]Google Cloud Build & Docker "Cloud Builder" - builds that previously worked now give 137 status code
在過去 2 個月左右的時間里,我一直在 Google Cloud Build 中運行一些使用 docker-compose 的構建管道,沒有任何問題。 該管道使用 Docker Compose 設置集成測試環境,並使用docker exec
命令在主容器 (container-dev) 上運行適用的單元和集成測試。
以下是 Cloud Build 文件的片段:
- id: "Set Up Testing Instances (Docker Compose)"
name: docker
env:
- 'DISCORD_TOKEN=automated_test'
- 'DOCKER_NETWORK=cloudbuild'
args: ["compose", "up", "-d", "--build"]
- id: "Run Unit & Integration Tests"
name: docker
args: ["exec", "container-dev", "python", "-m", "coverage", "run", "-m", "pytest"]
- id: "Show Test Coverage"
name: docker
args: ["exec", "container-dev", "python", "-m", "coverage", "report"]
- id: "Build Test Docker Container"
name: docker
entrypoint: /bin/bash
args: ["build", ".", "--target", "live", "-t", "us-east1-docker.pkg.dev/$PROJECT_ID/my-registry/mycontainer:test"]
幾個月來,這種配置對我來說一直運行良好。 然而,突然在 9 月 13 日,當我嘗試運行這些管道(甚至重試以前成功的管道)時,我遇到了一個問題,即第 2 步,單元和集成測試在沒有詳細推理的情況下失敗,只給了我狀態碼 137。我得到的日志如下:
Starting Step #1 - "Run Unit & Integration Tests"
Step #1 - "Run Unit & Integration Tests": Already have image (with digest): gcr.io/cloud-builders/docker
Finished Step #1 - "Run Unit & Integration Tests"
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 137
我知道如果運行容器的機器用完 memory 或已被另一個進程終止,則會出現狀態代碼 137。 最令人費解的方面是以前成功的管道現在如何在重試時失敗。
除非最近 Cloud Build 中使用的底層機器發生了變化,否則我認為 memory 的可用性不是問題。 我嘗試僅在獨立容器中運行單元測試(沒有 docker 組合),memory 的使用量明顯減少,結果完全相同。 共同點是圖像gcr.io/cloud-builders/docker
。
我的問題是:最近對 Cloud Build 所做的更改是否會影響到這一點? 為什么現在才出現這種情況?
編輯:我嘗試了更多的東西,比如更新來自谷歌的所有 Docker 圖像,並更新了上面的 YAML 以反映這一點。 137 消息現在又回來了。 之前似乎 docker 組合步驟過早終止,這導致錯誤代碼 1(容器不可用)。
現在,由於我通過升級圖像解決了這個問題,137 錯誤又回來了,即使我從我的 repo 的主分支運行,它之前在 9 月 13 日之前成功。我也運行了管道,因為有更多的內存/CPU ,但這仍然取得了相同的結果,來自 docker 的 137 錯誤代碼。
至於日志,我上面發布的內容與我得到的內容幾乎相同。 我將在這里添加幾行以獲得更多上下文。 流水線的第 0 步是在運行時在cloudbuild
網絡上設置容器,以便容器可以相互訪問。
步驟 #1 正在運行 Docker 映像以嘗試在容器上運行exec
命令以運行其單元測試,這是失敗的 137,它表示它已經擁有 docker 映像,然后在沒有任何日志的情況下剪切,所以我不知道那個容器里面發生了什么。
Step #0 - "Set Up Testing Instances (Docker Compose)":
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 [container-dev] exporting to image
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 exporting layers
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 exporting layers 1.6s done
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 writing image sha256:9ae549b1894c5ffcfadde428bd790fc26201a3a5b56b9d199adfac67b58ce669 done
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 naming to docker.io/library/container-dev done
Step #0 - "Set Up Testing Instances (Docker Compose)": #26 DONE 2.8s
Step #0 - "Set Up Testing Instances (Docker Compose)": Container cloud-storage Creating
Step #0 - "Set Up Testing Instances (Docker Compose)": Container firestore Creating
Step #0 - "Set Up Testing Instances (Docker Compose)": Container pubsub Creating
Step #0 - "Set Up Testing Instances (Docker Compose)": Container cloud-storage Created
Step #0 - "Set Up Testing Instances (Docker Compose)": Container firestore Created
Step #0 - "Set Up Testing Instances (Docker Compose)": Container pubsub Created
Step #0 - "Set Up Testing Instances (Docker Compose)": Container data-prep Creating
Step #0 - "Set Up Testing Instances (Docker Compose)": Container data-prep Created
Step #0 - "Set Up Testing Instances (Docker Compose)": Container container-dev Creating
Step #0 - "Set Up Testing Instances (Docker Compose)": Container container-dev Created
Step #0 - "Set Up Testing Instances (Docker Compose)": Container cloud-storage Starting
Step #0 - "Set Up Testing Instances (Docker Compose)": Container firestore Starting
Step #0 - "Set Up Testing Instances (Docker Compose)": Container pubsub Starting
Step #0 - "Set Up Testing Instances (Docker Compose)": Container firestore Started
Step #0 - "Set Up Testing Instances (Docker Compose)": Container cloud-storage Started
Step #0 - "Set Up Testing Instances (Docker Compose)": Container pubsub Started
Step #0 - "Set Up Testing Instances (Docker Compose)": Container data-prep Starting
Step #0 - "Set Up Testing Instances (Docker Compose)": Container data-prep Started
Step #0 - "Set Up Testing Instances (Docker Compose)": Container container-dev Starting
Step #0 - "Set Up Testing Instances (Docker Compose)": Container container-dev Started
Finished Step #0 - "Set Up Testing Instances (Docker Compose)"
Starting Step #1 - "Run Unit & Integration Tests"
Step #1 - "Run Unit & Integration Tests": Already have image: docker
Finished Step #1 - "Run Unit & Integration Tests"
ERROR
ERROR: build step 1 "docker" failed: step exited with non-zero status: 137
我將從使用官方 Cloud Builders 圖像開始:在所有三個步驟中將name
屬性設置為docker
, 如此處所述。 舊的圖像名稱不再得到很好的支持。
然后不要忘記將第一步的第一個參數從docker-compose
為 just compose
。
經過反復試驗,我發現最終被測試的容器由於缺少依賴項而失敗。 出於某種原因,Google Pub/Sub Python 庫進行了靜默升級/更改,突然需要一個名為pytz
的庫,該庫未包含在他們的 setup.py/pyproject.toml 中,不知道這是怎么發生的……
無論如何,將pytz
直接添加到我的 requirements.txt 文件后,容器現在可以工作,並且管道運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.