Gitlab CI/CD部署GCP Cloud Run成功但Job状态失败问题求助
问题根因
你遇到的云构建实际执行成功、服务部署完成但Gitlab Job失败的现象,根因为:gcloud builds submit命令默认会尝试流式拉取构建过程日志返回给终端,你当前Gitlab CI使用的GCP服务账号缺少日志查看相关权限,导致命令最终返回非0退出码,Gitlab CI检测到非0退出码后判定Job失败,与Docker镜像本身无关。
解决方案
你可以选择以下任意一种方案修复:
- 方案1:为服务账号补充所需权限
给Gitlab CI用到的GCP服务账号授予日志查看、云构建查看权限,执行以下命令即可:gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \ --member="serviceAccount:<替换为你的服务账号邮箱>" \ --role="roles/logging.viewer" gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \ --member="serviceAccount:<替换为你的服务账号邮箱>" \ --role="roles/cloudbuild.builds.viewer" - 方案2:关闭gcloud命令的日志流式拉取功能
不需要调整权限,直接修改.gitlab-ci.yml中的gcloud builds submit命令,添加--no-stream-logs参数,命令提交后会轮询构建状态直到完成,不会因日志权限报错:# 修改后的对应行 - gcloud builds submit . --config=cloudbuild_int.yaml --no-stream-logs - 方案3:适配VPC-SC安全策略场景
如果你的GCP项目开启了VPC服务边界限制,可先创建归属到VPC边界内的自定义存储桶作为日志存储桶,再给服务账号授予该桶的读写权限,提交构建时指定日志存储路径即可:# 修改后的对应行,<自定义日志桶路径>替换为实际gs://开头的桶路径 - gcloud builds submit . --config=cloudbuild_int.yaml --gcs-log-dir=<自定义日志桶路径>
内容的提问来源于stack exchange,提问作者MIkCode
相关产品推荐
相关产品推荐

