如何在docker集装箱中使用私人gem(GemFury)?

我试图运行一些ruby脚本来自动出口。 由于这些远程运行,我们在Docker容器中构build它们并将它们推送给iron worker。

我们使用GemFury来为这些脚本托pipe一些重要的私人gem。 为了保持GemFury的凭证不在Git中,我们使用一个全局的包configurationbundle config gem.fury.io MY_SECRET_TOKEN

我怎样才能设置捆绑的configuration,所以它会从GemFury拉入gem,而无需在源代码pipe理中显示?

将全局程序包configuration属性设置为特定于应用程序的属性。 将更改推送到公共存储库。 更新bundle-config文件( $APP_DIR/.bundle/config )中的SECRET_TOKEN值并运行$ 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 

这将在公共存储库上创build一个模板文件。 向存储库贡献者提供指令,以添加秘密令牌并执行相同的–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>来启用跟踪,并将所有私有值恢复为其伪值。 这种模板方法,也有风险,贡献者忘记禁用跟踪文件,并推动他们的私人价值的公共回购(但至less他们不会是你的秘密价值)

这种模板方法的优点是你尽可能地给开发者能够开始贡献给存储库。