duanlongnao0028 2018-08-31 14:54
浏览 36
已采纳

使用Cloud Build部署App Engine go应用

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:

  1. Ideally being able to build artifacts into project-artifacts bucket and deploy them using the deploy step
  2. If that's not possible I at least need to know how to run gcloud components install app-engine-go within the deploy container so it doesn't fail with missing dependency.
  • 写回答

1条回答 默认 最新

  • dounabi6295 2018-09-13 07:46
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格