2

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

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

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

4

1 回答 1

1

将全局捆绑配置属性设置为特定于应用程序的属性。将更改推送到公共存储库。更新SECRET_TOKENbundle-config 文件 ( $APP_DIR/.bundle/config) 中的值并运行$ git update-index --assume-unchanged <file>命令从 git 跟踪中删除该文件,并防止更新公共存储库中的实际 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

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

示例文件

公共 github 存储库上的$APP_DIR/.bundle/config文件:

--- 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>以启用跟踪,并将所有私有值恢复为其伪值。这种模板方法,还有贡献者忘记禁用文件跟踪并将其私有值推送到公共存储库的风险(但至少它们不会是您的秘密值)

这种模板方法的优点是您尽可能多地让开发人员能够开始为存储库做出贡献。

于 2016-01-15T21:01:54.717 回答