为什么AppEngine部署会因构建失败而失败



我开始开发一个应用程序,突然它无法部署到appengine,并显示以下错误消息:

siim@pebble:~/projects/xyz$ gcloud app deploy
Services to deploy:
descriptor:                  [/home/siim/projects/xyz/app.yaml]
source:                      [/home/siim/projects/xyz]
target project:              [xyz]
target service:              [default]
target version:              [20220313t182940]
target url:                  [https://xyz.uc.r.appspot.com]
target service account:      [App Engine default service account]

Do you want to continue (Y/n)?  y
Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...failed.                                                                                                                    
ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 016c4604-6ea6-47df-8144-e7f1471c6df6 status: FAILURE
removing /layers/google.go.gomod/gopath: unlinkat /layers/google.go.gomod/gopath/pkg/mod/github.com/golang/protobuf@v1.3.1/regenerate.sh: permission denied
Full build logs: https://console.cloud.google.com/cloud-build/builds;region=us-central1/016c4604-6ea6-47df-8144-e7f1471c6df6?project=576574664421

点击构建日志,我看到:

===> DETECTING
google.go.appengine_gomod 0.9.0
google.go.gomod           0.9.0
google.go.build           0.9.0
google.go.appengine       0.9.0
google.utils.label        0.0.2
===> ANALYZING
Previous image with name "us.gcr.io/xyz/app-engine-tmp/app/default/ttl-18h:69af35b6-6fc6-4167-88f3-da16f9cfc7e7" not found
Restoring metadata for "google.go.gomod:gopath" from cache
===> RESTORING
Restoring data for "google.go.gomod:gopath" from cache
===> BUILDING
=== App Engine Gomod (google.go.appengine_gomod@0.9.0) ===
--------------------------------------------------------------------------------
Running "cp --dereference -R . /layers/google.go.appengine_gomod/srv"
Done "cp --dereference -R . /layers/google.go.appengine_gomod/srv" (53.220262ms)
=== Go - Gomod (google.go.gomod@0.9.0) ===
DEBUG: go.mod SHA has changed: clearing GOPATH layer's cache
Failure: (ID: f51775d1) removing /layers/google.go.gomod/gopath: unlinkat /layers/google.go.gomod/gopath/pkg/mod/github.com/golang/protobuf@v1.3.1/regenerate.sh: permission denied
--------------------------------------------------------------------------------
Running "mv -f /builder/outputs/output-5577006791947779410 /builder/outputs/output"
Done "mv -f /builder/outputs/output-5577006791947779410 /builder/o..." (5.980458ms)
ERROR: failed to build: exit status 1

我对此完全感到困惑。AFAICT这是AppEngine内部做的事情,所以我认为我没有任何方法来进一步调试它?FWIW,我的应用程序是超级简单的ATM:

module xyz
go 1.17
require (
github.com/go-chi/chi/v5 v5.0.7
go.etcd.io/bbolt v1.3.6
google.golang.org/appengine/v2 v2.0.1
)
require (
github.com/golang/protobuf v1.3.1 // indirect
golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d // indirect
)

和:

runtime: go116
main: ./cmd/server

解决方案是转到云控制台中的容器注册表(可能很快就会有工件注册表(,并删除那里的所有容器。这个问题很可能只是其中一个图像(可能是构建缓存图像(,但我的应用程序没有发布,所以我可以删除所有图像。

我使用--no-cache选项来解决它,但它并不完美,因为没有启用缓存。

$ gcloud app deploy app.yaml --no-cache

最新更新