簡體   English   中英

Google Cloud Build & Docker “Cloud Builder” - 以前工作的構建現在提供 137 狀態代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM