目标:
使用Cloud Build配置 - 将应用程序构建到可以部署到应用程序引擎的工件中。
解决方案不起作用:
这是cloudbuild.yaml
:
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['get']
env: ['PROJECT_ROOT=project-name']
- name: 'gcr.io/cloud-builders/go'
args: ['build', '.']
env: ['PROJECT_ROOT=project-name']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
timeout: '1600s'
artifacts:
objects:
location: 'gs://project-artifacts/'
paths: ['project-name']
App Engine配置app.yaml
:
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
最后main.go
:https://github.com/GoogleCloudPlatform/golang-samples/blob/master/appengine/helloworld/hello.go
我知道部署步骤现在非常幼稚,甚至不需要前两个步骤。咨询cloud app
帮助,我无法看到deploy
步骤是否可以接受外部神器。
部署步骤失败:
failed analyzing /workspace: cannot find package "google.golang.org/appengine" in any of:
($GOROOT not set)
/builder/home/go/src/google.golang.org/appengine (from $GOPATH)
GOPATH: /builder/home/go
我正在寻找2个解决方案:
project-artifacts
存储桶中并使用部署步骤进行部署gcloud components install app-engine-go
,这样它就不会因缺少依赖而失败。在构建目录(/workspace
)之外使用GOPATH。例如,/gopath
。
此外,因为默认情况下,在Cloud Build步骤之间仅保留/workspace
,所以必须将GOPATH放在卷中。
以下完整示例适用于我:
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['get', '-d', './...']
env: ['GOPATH=/gopath']
volumes:
- name: 'go'
path: '/gopath'
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
env: ['GOPATH=/gopath']
volumes:
- name: 'go'
path: '/gopath'
此外,我必须将App Engine管理员角色授予IAM中的Cloud Build服务帐户,以便gcloud app deploy
步骤在Cloud Build中成功。