GCP CloudBuild部署App Engine时出现递归创建多构建问题求助
问题解决步骤
1 修复递归构建问题
递归构建的核心原因是gcloud app deploy操作默认会生成带特定前缀的部署标签/提交,触发了你配置的GitHub推送监听规则,按照以下操作修复:
- 进入GCP Cloud Build控制台的触发规则编辑页,在「标签忽略规则」栏添加匹配规则
gae-deploy-*,过滤掉App Engine部署自动生成的标签触发 - 在项目根目录新增
.gcloudignore文件,添加以下内容:
cloudbuild.yaml node_modules/ .git/ .env build/ dist/
避免部署包包含不必要的文件,同时排除Cloud Build配置文件变更导致的重复触发。
2 优化Cloud Build配置
原配置缺失Node.js依赖安装、Strapi生产构建步骤,且缺少gcloud部署的静默参数,以下为可用的cloudbuild.yaml配置:
steps: # 安装依赖并构建Strapi - name: 'node:18-alpine' # 替换为和你Strapi版本匹配的Node.js版本 entrypoint: 'npm' args: ['install'] - name: 'node:18-alpine' entrypoint: 'npm' args: ['run', 'build'] # 生成app.yaml配置 - name: 'ubuntu' entrypoint: "bash" args: - "-c" - | rm -rf app.yaml cat <<EOT >> app.yaml runtime: custom env: flex env_variables: HOST: '0.0.0.0' PORT: '8080' # 必须配置为8080,App Engine Flex默认转发到该端口 NODE_ENV: 'production' DATABASE_NAME: ${_DATABASE_NAME} DATABASE_USERNAME: ${_DATABASE_USERNAME} DATABASE_PASSWORD: ${_DATABASE_PASSWORD} INSTANCE_CONNECTION_NAME: ${_INSTANCE_CONNECTION_NAME} beta_settings: cloud_sql_instances: ${_CLOUD_SQL_INSTANCES} automatic_scaling: min_num_instances: 1 max_num_instances: 2 EOT # 部署到App Engine - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: 'bash' args: ['-c', 'gcloud app deploy app.yaml --project ecomm-backoffice --quiet'] # 加--quiet避免交互阻塞
3 补充必要配置与权限
- 确保项目根目录存在符合Strapi生产部署要求的Dockerfile,示例如下:
FROM node:18-alpine # 安装系统依赖 RUN apk add --no-cache libc6-compat WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 8080 CMD ["npm", "start"]
- 为Cloud Build服务账号(格式为
[项目编号]@cloudbuild.gserviceaccount.com)添加以下IAM权限:- App Engine 部署者 (roles/appengine.deployer)
- App Engine 服务管理员 (roles/appengine.serviceAdmin)
- Cloud SQL 客户端 (roles/cloudsql.client)(使用Cloud SQL代理连接时必须配置)
4 Strapi部署额外注意事项
- 如果使用Cloud SQL PostgreSQL/MySQL,数据库配置中需要将host指向
/cloudsql/${INSTANCE_CONNECTION_NAME}对应的套接字路径,或者配置为通过TCP端口连接 - Strapi生产环境的静态资源路径、管理员路径配置需要和App Engine的路由规则匹配,避免出现404问题
内容的提问来源于stack exchange,提问作者Omkar
相关产品推荐
相关产品推荐

