目标:
使用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
,以确保它不会因缺少依赖项而失败。答案 0 :(得分:2)
在构建目录(/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 Admin角色授予IAM中的Cloud Build服务帐户,以便gcloud app deploy
步骤在Cloud Build中成功。