繁体   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