我使用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
我的app.yaml
使用自定义env从Dockerfile构建它,看起来像这样:
runtime: custom
env: flex
manual_scaling:
instances: 1
env_variables:
NODE_ENV: dev
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
直接为App Engine Flex应用运行gcloud app deploy
时,例如从本地计算机在引擎盖下生成Cloud Build作业来构建映像,然后将该映像部署到GAE(您可以在Cloud Console中看到该版本>云构建)。这个版本有10分钟的超时时间,可以通过以下方式自定义:
gcloud config set app/cloud_build_timeout 1000
现在,这里的问题是您正在Cloud Build本身中发出
gcloud app deploy
命令。由于每个单独的Cloud Build步骤都在其自己的Docker容器中运行,因此您不能仅添加上一步来自定义超时,因为下一个步骤将使用默认的gcloud
设置。
您有几种解决方法:
docker build
构建映像,然后将其上传到Google Cloud Registry。您可以在这些步骤上设置自定义超时以满足您的需求。最后,使用glcoud app deploy --image-url=IMAGE-URL
部署您的应用。app/cloud_build_timeout
设置为您的自定义值。