Разверните приложение App Engine go с помощью Cloud Build - PullRequest
0 голосов
/ 31 августа 2018

Цель:

Использование конфигурации 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 решения:

  1. В идеале возможность встраивать артефакты в project-artifacts корзину и развертывать их, используя шаг развертывания
  2. Если это невозможно, мне по крайней мере нужно знать, как запустить gcloud components install app-engine-go в контейнере развертывания, чтобы он не завершился с отсутствующей зависимостью.

1 Ответ

0 голосов
/ 13 сентября 2018

Используйте 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 учетной записи службы Cloud Build в IAM, чтобы шаг gcloud app deploy был успешным в Cloud Build.

...