猿问

在 Google Cloud Build 上部署 Golang AppEngine 产生无限构建

我正在尝试设置 Cloud Build 管道以将golang应用程序部署到 App Engine,但它似乎会生成无限版本的自身,然后超时。


首先,这是我的配置。


steps:

- name: "gcr.io/cloud-builders/go"

  args:

    - get

    - "-u"

    - "-d"

    - "github.com/didip/tollbooth"

    - "github.com/lib/pq"

    - "github.com/stretchr/testify"

    - "github.com/go-redis/redis"

    - "cloud.google.com/go/pubsub"

  dir: "/workspace"

  volumes:

    - name: 'go'

      path: '/gopath'

  env:

    - "GOPATH=/gopath"

- name: "gcr.io/cloud-builders/gcloud"

  args: ["app", "deploy", "--stop-previous-version"]

  dir: "/workspace"

  volumes:

    - name: 'go'

      path: '/gopath'

  env:

    - "GOPATH=/gopath"

这是相关部分app.yaml:


service: "myservice"

runtime: custom

env: flex

当我部署到我已将其配置为观看的分支时,它开始构建就好了,并完成第 0 步。然后它开始第 1 步,即,它似乎递归地生成管道的另一个实例(见下面的gcloud app deploy日志). 这一直持续到一切超时。


这是日志的开头(接近尾声时,您会看到它再次在步骤 1 中递归地开始步骤 0)。


料青山看我应如是
浏览 165回答 2
2回答

忽然笑

所以这原来是一个关于如何Google Cloud Build处理配置文件的问题cloudbuild.yaml。它必须在每次看到一个新版本时生成一个新版本,无论它是否已经被看到。就我而言,由于项目很小,所以cloudbuild.yaml我的 go 源代码都位于项目的根目录。这会导致以下情况:初始git push触发构建,读取cloudbuild.yaml.该构建发现cloudbuild.yaml当前工作目录中有一个,并为此生成一个新构建。我想这很有用,因为您可以为项目中的各种事物设置多个构建配置,这些配置将在遇到时构建。将 go 源移动到src/(远离 cloudbuild)解决了这个问题。tl;dr不要把你的放在cloudbuild.yaml工作目录中。

哔哔one

我无法重新创建无限构建,但有几件事自定义运行时需要 Dockerfile,您是否尝试过在 go 运行时中运行您的服务?https://cloud.google.com/appengine/docs/flexible/custom-runtimes/buildhttps://cloud.google.com/appengine/docs/go/https://cloud.google.com/appengine/docs/flexible/go/quickstart您使用卷而不是仅仅在环境中设置项目根目录是否有特定原因?https://github.com/GoogleCloudPlatform/cloud-builders/blob/master/go/examples/hello_world/cloudbuild.yamlhttps://github.com/GoogleCloudPlatform/cloud-builders/tree/master/go/examples

慕标琳琳

您无权部署应用程序和启用 Appenginge Flexible API。在日志中,有一个警告:WARNING: Unable to verify that the Appengine Flexible API is enabled for project [project-name]. You may not have permission to list enabled services on this project.If it is not enabled, this may cause problems in running your deployment.Please ask the project owner to ensure that the Appengine Flexible APIhas been enabled and that this account has permission to list enabled APIs.简化 AppEngine 灵活应用部署的步骤:作为项目所有者:首次启用 Appengine Flexible API + 部署应用程序,并且:为您用于执行该任务的用户授予部署 AppEngine 应用程序的权限。
随时随地看视频慕课网APP

相关分类

Go
我要回答