【问题标题】:Google Container Builder: How to install govendor dependencies during build step?Google Container Builder:如何在构建步骤中安装 govendor 依赖项?
【发布时间】:2017-09-24 21:45:35
【问题描述】:

我正在尝试使用 Google Cloud Container Builder 使用 GCP 构建触发器自动构建我的容器

我的代码在 Go 中,我的项目根目录中有一个 vendor 文件夹,其中包含我所有的 Go 依赖项(我使用 govendor)。但是,此 vendor 文件夹未签入源代码管理。

我有一个 cloudbuild.yaml 文件,我首先将我的 Go 源代码构建为 main 可执行文件,然后使用此可执行文件构建 Docker 映像。 Container Builder 确保这些构建步骤可以访问我的主分支。

问题是 Go 编译步骤失败,因为 vendor 文件夹没有签入源代码管理,所以我的任何依赖项都不适用于任何构建步骤。

有没有办法创建一个使用govendor 将所有依赖项安装在vendor 文件夹中的构建步骤? 如果可以,怎么做?或者是将我的vendor 目录签入源代码管理的唯一选择(这对我来说似乎没有必要)?

【问题讨论】:

  • 如果没有签入 vendor 文件夹,那么使用 govendor 有什么意义?
  • @JimB:我的 vendor.json 文件已签入以确保依赖关系在任何环境中都是一致的。未签入依赖项的实际源代码。类似于 node.js,其中 package.json 被添加到 Git,但 node_modules/ 目录没有。这就是我没有将依赖项添加到 Git 的原因:getcomposer.org/doc/faqs/…
  • 如果您有./vendor/vendor.json 文件,govendor 可以为您构建供应商目录。你在执行govendor时遇到问题吗? (作为记录,大多数人更喜欢检查供应商目录,因为它使构建更可靠,并保护您免受依赖关系破坏或完全不可用)
  • 这些只是一些开源示例,您可以create your own build steps。使用 './vendor` 来检查依赖关系。拿几乎所有的主要项目,看看供应商树,例如KubernetesTerraformCaddy 等。除了在使用外部代码之前通常会采取的措施外,无需采取任何预防措施。
  • 实际上,composer 反对提交依赖项的论点都不适用。 1) VCS 大小:猜猜看,你仍然需要下载所有依赖项。事实上,构建系统通常会缓存本地结帐(例如 git pull 而不是 git clone),但不会缓存依赖项。 2) govendor 不导入历史。 3) govendor 不创建子模块。能够克隆您的项目并准备好开始是一个巨大的福音。它避免了像您现在遇到的问题(以及更多问题)。我建议你重新考虑提交供应商。

标签: go google-cloud-platform google-container-registry govendor google-container-builder


【解决方案1】:

根据@JimB 和@Peter 对我的问题的cmets,一个简单的解决方案是将我的vendor 目录添加到Git,这样我就不必在构建步骤中下载所有依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2014-12-09
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多