使用Cloud Build部署App Engine go app

问题描述 投票:1回答:1

目标:

使用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.gohttps://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个解决方案:

  1. 理想情况下,能够将构件构建到project-artifacts存储桶中并使用部署步骤进行部署
  2. 如果那是不可能的,我至少需要知道如何在部署容器中运行gcloud components install app-engine-go,这样它就不会因缺少依赖而失败。
google-app-engine go google-cloud-platform google-cloud-build
1个回答
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管理员角色授予IAM中的Cloud Build服务帐户,以便gcloud app deploy步骤在Cloud Build中成功。

© www.soinside.com 2019 - 2024. All rights reserved.