【问题标题】:Deploying Golang AppEngine on Google Cloud Build spawns infinite builds在 Google Cloud Build 上部署 Golang AppEngine 会产生无限构建
【发布时间】:2019-01-30 10:11:45
【问题描述】:

我正在尝试设置 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 步)。

starting build "e5ad47ed-5332-4bc7-b4ac-618e243f05a5"

FETCHSOURCE
Fetching storage object: gs://staging.myproject-event.appspot.com/asia.gcr.io/myproject-event/appengine/myservice.20190130t095428:latest#1548842070817530
Copying gs://staging.myproject-event.appspot.com/asia.gcr.io/myproject-event/appengine/myservice.20190130t095428:latest#1548842070817530...
/ [0 files][ 0.0 B/ 10.9 KiB] 
-
- [1 files][ 10.9 KiB/ 10.9 KiB] 
Operation completed over 1 objects/10.9 KiB. 
BUILD
Starting Step #0
Step #0: Already have image (with digest): gcr.io/cloud-builders/go
Step #0: Documentation at https://github.com/GoogleCloudPlatform/cloud-builders/blob/master/go/README.md
Step #0: Running: go 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
Finished Step #0
Starting Step #1
Step #1: Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #1: Services to deploy:
Step #1: 
Step #1: descriptor: [/workspace/app.yaml]
Step #1: source: [/workspace]
Step #1: target project: [myproject-event]
Step #1: target service: [myservice]
Step #1: target version: [20190130t095546]
Step #1: target url: [https://myservice-dot-myproject-event.appspot.com]
Step #1: 
Step #1: 
Step #1: Do you want to continue (Y/n)? 
Step #1: WARNING: Unable to verify that the Appengine Flexible API is enabled for project [myproject-event]. 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 API has been enabled and that this account has permission to list enabled APIs.
Step #1: Beginning deployment of service [myservice]...
Step #1: Building and pushing image for service [myservice]
Step #1: Started cloud build [b41069a6-2ef7-4eaf-8b49-de36bc620be2].
Step #1: To see logs in the Cloud Console: https://console.cloud.google.com/gcr/builds/b41069a6-2ef7-4eaf-8b49-de36bc620be2?project=954549095871
Step #1: ----------------------------- REMOTE BUILD OUTPUT ------------------------------
Step #1: starting build "b41069a6-2ef7-4eaf-8b49-de36bc620be2"
Step #1: 
Step #1: FETCHSOURCE
Step #1: Fetching storage object: gs://staging.myproject-event.appspot.com/asia.gcr.io/myproject-event/appengine/myservice.20190130t095546:latest#1548842148386512
Step #1: Copying gs://staging.myproject-event.appspot.com/asia.gcr.io/myproject-event/appengine/myservice.20190130t095546:latest#1548842148386512...
Step #1: / [0 files][ 0.0 B/ 10.9 KiB] 
/ [0 files][ 10.9 KiB/ 10.9 KiB] 
-
- [1 files][ 10.9 KiB/ 10.9 KiB] 
Step #1: Operation completed over 1 objects/10.9 KiB. 
Step #1: BUILD
Step #1: Starting Step #0
Step #1: Step #0: Already have image (with digest): gcr.io/cloud-builders/go
Step #1: Step #0: Documentation at https://github.com/GoogleCloudPlatform/cloud-builders/blob/master/go/README.md
Step #1: Step #0: Running: go 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
Step #1: Finished Step #0
Step #1: Starting Step #1
Step #1: Step #1: Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #1: Step #1: Services to deploy:

这一直持续到我手动终止最后一个构建:

Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Copying gs://staging.solution360-event.appspot.com/asia.gcr.io/solution360-event/appengine/authproxy.20190130t100329:latest#1548842611410114...
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: / [0 files][ 0.0 B/ 10.9 KiB] 
-
- [1 files][ 10.9 KiB/ 10.9 KiB] 
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Operation completed over 1 objects/10.9 KiB. 
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: BUILD
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Starting Step #0
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Step #0: Already have image (with digest): gcr.io/cloud-builders/go
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Step #0: Documentation at https://github.com/GoogleCloudPlatform/cloud-builders/blob/master/go/README.md
Step #1: Step #1: Step #1: Step #1: Step #1: Step #1: Step #0: Running: go 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

我尝试过的:

  • 从命令中删除“--stop-previous-versions”标志。
  • gopath 挂载到不同的卷中,以防导致 gcloud 递归进入其中。
  • 只运行第 1 步,结果相同。

请参阅附加的实际生成生成的屏幕截图:

【问题讨论】:

    标签: docker google-app-engine go google-cloud-platform google-cloud-build


    【解决方案1】:

    所以这被证明是Google Cloud Build 如何处理与配置文件cloudbuild.yaml 的相遇的问题。每次看到一个新构建时,它都必须生成一个新构建,不管它是否已经被看到。

    在我的例子中,由于项目很小,cloudbuild.yaml 和我的 go 源代码都位于项目的根目录。这会导致以下情况:

    • 初始的git push 触发构建,其内容为cloudbuild.yaml
    • 构建发现当前工作目录中有一个 cloudbuild.yaml 并为此生成一个新构建。

    我认为这很有用,因为您可以为项目中的各种事物设置多个构建配置,这些配置将在遇到时构建。

    将 go 源移至 src/(远离 cloudbuild)解决了该问题。

    tl;dr 不要将您的cloudbuild.yaml 放在工作目录中。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        您无权部署应用和启用 Appenginge 灵活 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 API
        has been enabled and that this account has permission to list enabled APIs.
        

        简化 AppEngine 灵活应用程序部署的步骤:

        1. 作为项目所有者:enable Appengine Flexible API + deploy app for the first time,并且:
        2. Grant permissions to deploy AppEngine app 用于执行该任务的用户。

        【讨论】:

        • @Prajjwal 如果这个答案有用,你能接受吗?谢谢!
        • 给它请求的每一个权限是我尝试的第一件事。不是这个。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 2020-03-22
        • 2021-09-14
        • 1970-01-01
        • 2020-09-26
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多