Reputation: 1124
Goal:
Using Cloud Build configuration - build an app into an artifact that can be deployed to app engine.
Solution that's not working:
This is 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 config app.yaml
:
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
And finally main.go
: https://github.com/GoogleCloudPlatform/golang-samples/blob/master/appengine/helloworld/hello.go
I do understand that the deploy step is now very naive and doesn't even need the previous 2 steps. Consulting the cloud app
help, I wasn't able to see whether the deploy
step can accept external artifact.
The deploy step fails with:
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
I'm looking for 2 solutions:
project-artifacts
bucket and deploy them using the deploy stepgcloud components install app-engine-go
within the deploy container so it doesn't fail with missing dependency.Upvotes: 2
Views: 1830
Reputation: 6621
Use a GOPATH outside of your build directory (/workspace
). For example, /gopath
.
Additionally, because by default only /workspace
is preserved between Cloud Build steps, you must put your GOPATH in a volume.
The following complete example works for me:
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'
Additionally, I had to grant the App Engine Admin role to the Cloud Build service account in IAM for the gcloud app deploy
step to succeed within Cloud Build.
Upvotes: 4