如何在 Google Cloud Builder 中调用 Docker 并将图像从 Go 推送到 GCR

How to call Docker and Push Images to GCR from Go in Google Cloud Builder

我希望过渡到 Google Cloud Builder 来构建我的项目。该项目包含我想要构建并推送到 Google Container Registry 的大量 Docker 图像。

我有一个在 Travis CI 上运行良好的 Cobra CLI 命令,可以自动执行 linting(golintgo vet)、格式化(gofmt)、测试(go test), 以及其他诸如自动化原型编译之类的东西。该命令还为存储库(有很多)中的每个可执行文件 (package main) 发现、构建和推送一个 Docker 映像。

我想过渡到 Cloud Builder,但我不清楚如何从 Cobra CLI 调用 Docker。提供的 go 构建器映像 gcr.io/cloud-builders/go 没有 Docker CLI 和 Docker 构建器映像 gcr.io/cloud-builders/docker 似乎没有 go 运行。

任何有关如何设置 Cloud Builder yaml 的建议,这将使我能够利用经过身份验证的 Docker CLI,同时还提供对 go 的支持,我们将不胜感激。

有趣的问题。

Cloud Build "build" 是(最好)使用 cloudbuild.yaml 文件配置的。此配置文件是您的 CI|CD 进程的声明性定义,应该构成源代码库的一部分,可以是 运行 签入等

Cloud Build 最好被视为流水线处理器;它将一系列函数(顺序地)应用于某些输入。通常,输出(工件)是容器镜像(但不一定是)。每个管道步骤都显示为一个容器(给定一些输入、参数等的图像)

因此,虽然 Cloud Build 可以替代您的 Travis 作业,但您需要做一些工作来转换似乎是使用 Cobra 以编程方式调用的一系列 command-line 步骤(go,golint,gofmt) 到 YAML 中定义的一系列等效的容器化步骤。

这是 community-provided 张图片中的 list of Google-supported containers. Because Cloud Build's unit of work is a(ny) container (image), almost anything can be used. Here's the list 张。

golintgofmt 未列出(尽管我假设有人已经构建了它们中的每一个)。这些对于您开发然后包含在您的管道中是微不足道的。如果您确实构建了它们,请将它们提交到社区仓库。

gRPC protoc 已包含 (link)