【发布时间】:2019-02-06 15:19:41
【问题描述】:
目标:
使用 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
我知道部署步骤现在非常幼稚,甚至不需要前面的 2 个步骤。咨询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,这样它就不会因缺少依赖项而失败。
【问题讨论】:
-
嗯......有趣的问题。我没有尝试将 Cloud Build 与 App Engine 结合使用,但您强迫我尝试一下。根据经验,我发现
cloud-builders/go难以配置。我会去报告! -
这是一个使用 Cloud Build 部署 App Engine 示例应用 (gist.github.com/DazWilkin/05984055d6e80cfcab6258b3da85e30a) 的示例。如前所述,我发现 Go 构建具有挑战性,但这只是反映了 Cloud Build 容器上的本地
go结构,然后从 src 目录进行部署。 -
IIUC 使用
artifacts上传目录,您要么需要添加 zip 步骤并上传 zip,要么枚举所有文件。或者,您可能希望删除artifacts并添加gsutil构建步骤以递归复制您的工件。 -
您分享的要点帮助我完成了部署工作。但是我从我的项目文件夹运行部署,该文件夹已经位于 go
src文件夹的深处。这意味着我所有的来源都在容器中的/workspace中。我通过将我的资源移动到./app子文件夹来暂时破解它。非常感谢您花时间尝试这个!
标签: google-app-engine go google-cloud-platform google-cloud-build