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 step gcloud components install app-engine-go
within the deploy container so it doesn't fail with missing dependency. 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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.