GCP Cloud 构建忽略超时设置

Ant*_*maz 7 google-app-engine node.js docker google-cloud-platform google-cloud-build

我使用 Cloud Build 从存储复制配置文件并将应用程序部署到App Engine flex. 问题是每次构建持续超过 10 分钟就会失败。我在 cloudbuild.yaml 中指定了超时,但看起来它被忽略了。另外,我配置app/cloud_build_timeout并将其设置为 1000。有人可以向我解释一下这里出了什么问题吗?

我的cloudbuild.yaml样子是这样的:

steps:
  - name: gcr.io/cloud-builders/gsutil
    args: ["cp", "gs://myproj-dev-247118.appspot.com/.env.cloud", ".env"]
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["app", "deploy"]
    timeout: 1000s
timeout: 1600s
Run Code Online (Sandbox Code Playgroud)

app.yaml使用从 Dockerfile 构建的自定义环境,如下所示:

runtime: custom
env: flex

manual_scaling:
  instances: 1
env_variables:
  NODE_ENV: dev
Run Code Online (Sandbox Code Playgroud)

Dockerfile 也不包含任何特殊内容,只是安装依赖项和应用程序构建:

FROM node:10 as front-builder
WORKDIR /app
COPY front-end .
RUN npm install
RUN npm run build:web

FROM node:12
WORKDIR /app
COPY api .
RUN npm install
RUN npm run build
COPY .env .env
EXPOSE 8080
COPY --from=front-builder /app/web-build web-build
CMD npm start
Run Code Online (Sandbox Code Playgroud)

Lun*_*ast 3

例如,当直接运行gcloud app deployApp Engine Flex 应用程序时(例如,从本地计算机),它会在后台生成一个 Cloud Build 作业来构建映像,然后将该映像部署到 GAE(您可以在 Cloud Console > Cloud Build 中看到该构建)。此构建有 10 分钟超时,可以通过以下方式自定义:

gcloud config set app/cloud_build_timeout 1000
Run Code Online (Sandbox Code Playgroud)

现在,这里的问题是您gcloud app deploy从 Cloud Build 本身发出命令。由于每个单独的 Cloud Build 步骤都在其自己的 Docker 容器中运行,因此您不能仅添加上一个步骤来自定义超时,因为下一个步骤将使用默认gcloud设置。

您有多种选择来解决此问题:

  • 添加构建步骤,首先使用 构建镜像docker build,然后将其上传到 Google Cloud Registry。您可以在这些步骤上设置自定义超时以满足您的需求。最后,使用glcoud app deploy --image-url=IMAGE-URL.
  • 创建您自己的自定义 gcloud 构建器,其中app/cloud_build_timeout设置为您的自定义值。您可以从默认的 gcloud 构建器 Dockerfile中派生它并添加/builder/google-cloud-sdk/bin/gcloud config set app/cloud_build_timeout 1000