如何在 docker 容器中使用私有宝石 (GemFury)?

How can I use private gems(GemFury) in a docker container?

我正在尝试 运行 一些 ruby 用于自动导出的脚本。由于这些 运行 是远程的,我们将它们构建在一个 Docker 容器中并将它们推送给钢铁工人。

我们使用 GemFury 为这些脚本托管一些重要的私有 gem。 为了使 GemFury 的凭据不在 Git 之外,我们使用全局捆绑配置 bundle config gem.fury.io MY_SECRET_TOKEN

我如何设置 bundle 的配置,以便它从 GemFury 中提取 gems,而不让它们显示在源代码管理中?

将全局包配置 属性 设置为特定于应用程序 属性。将更改推送到 public 存储库。更新 bundle-config 文件 ($APP_DIR/.bundle/config) 中的 SECRET_TOKEN 值和 运行 $ git update-index --assume-unchanged <file> 命令以从 git 跟踪中删除文件并防止更新public 存储库中的实际 SECRET_TOKEN 值。

$ bundle config --local gem.fury.io SECRET_TOKEN
$ git commit -a -m "adding application bundle config properties"
$ git push origin master
$ bundle config --local gem.fury.io d1320f07ac50d1033e8ef5fbd56adf360ec103b2
$ git update-index --assume-unchanged $APP_DIR/.bundle/config

这会在 public 存储库中创建一个 模板 文件。向存储库贡献者提供说明以添加秘密令牌并执行相同的 --assume-unchanged 命令。

示例文件

$APP_DIR/.bundle/config 文件在 public github 仓库:

--- BUNDLE_GEM__FURY__IO: MY_SECRET_TOKEN

$APP_DIR/.bundle/config 本地机器文件

--- BUNDLE_GEM__FURY__IO: d1320f07ac50d1033e8ef5fbd56adf360ec103b2

有关说明和更多详细信息,请参阅 bundle-cofig 文档

注意:这种方法的缺点有两个:

  1. 克隆存储库并需要 SECRET_TOKEN 值的开发人员将不得不通过一些外部手动过程获取它(良好的安全实践,但设置起来很痛苦)
  2. 如果您需要添加更多 bundle-config 属性,您将必须 运行 git update-index --no-assume-unchanged <file> 启用跟踪,并还原所有 private 值到它们的伪值。这种模板方法也存在贡献者忘记禁用文件跟踪并将其私有值推送到 public 存储库的风险(但至少它们不会成为您的秘密值)

这种模板方法的优势在于,您为开发人员提供了尽可能多的机会,以便他们能够开始为存储库做贡献。