使用 Cloud Build 部署 App Engine go 应用
Deploy App Engine go app using 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 引擎配置 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
,这样它就不会因缺少依赖项而失败。
在构建目录之外使用 GOPATH (/workspace
)。例如,/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 中取得成功。
目标:
使用 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 引擎配置 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
,这样它就不会因缺少依赖项而失败。
在构建目录之外使用 GOPATH (/workspace
)。例如,/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 中取得成功。