google-app-engine - 使用 Cloud Build 部署 App Engine go 应用

标签 google-app-engine go google-cloud-platform google-cloud-build

目标:

使用 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

我确实知道部署步骤现在非常简单,甚至不需要前面的两个步骤。查阅云应用帮助,我无法查看部署步骤是否可以接受外部工件。

部署步骤失败并显示:

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,这样它就不会因缺少依赖项而失败。

最佳答案

在构建目录 (/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'

此外,我必须向 IAM 中的 Cloud Build 服务帐户授予 App Engine 管理员角色,才能在 Cloud Build 中成功执行 gcloud app 部署 步骤。

关于google-app-engine - 使用 Cloud Build 部署 App Engine go 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118034/

相关文章:

java - 不断收到错误消息,指出 localhost 的 Server App Engine Standard 无法启动

google-app-engine - 如何从 webapp2_extras.appengine.auth.models.Unique 中删除?

node.js - GCP Cloud Function 从 Cloud Storage 读取文件

http - golang http服务器,无法获取post值

cloud - 将第二个内部/私有(private) IP 地址添加到谷歌云 vm 实例

python - 如何使用 python 从 gs 存储桶中获取文件数

google-app-engine - 使用部分字符串作为过滤器在 Go GAE 数据存储中搜索条目

android - GAE 无法识别 Cookie?

go - 没有值时删除具有空值的元素

戈朗 : json Unmarshal fails to unpack simple example