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

时间:2016-01-15 20:02:38

标签: ruby git docker bundle gem-fury

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

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

如何设置bundle的配置,以便从GemFury中获取宝石而不将它们显示在源代码管理中?

1 个答案:

答案 0 :(得分:1)

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

$ 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 repo上的

$ 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>以启用跟踪,并将所有私有值还原为其伪值。这种模板方法也存在风险,即贡献者忘记禁用对文件的跟踪并将其私有值推送到公共存储库(但至少它们不是您的秘密值)。
  3. 这种模板方法的优点是,您可以尽可能地为开发人员提供能够开始为存储库做贡献的方法。