如何在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文档
注意:这种方法的缺点是双重的:
- 克隆存储库并需要
SECRET_TOKEN
值的开发人员必须通过一些外部手动过程来获得它(良好的安全实践,但是很难设置) - 如果您需要添加更多的bundle-config属性,您将不得不运行
git update-index --no-assume-unchanged <file>
来启用跟踪,并将所有私有值恢复为其伪值。 这种模板方法,也有风险,贡献者忘记禁用跟踪文件,并推动他们的私人价值的公共回购(但至less他们不会是你的秘密价值)
这种模板方法的优点是你尽可能地给开发者能够开始贡献给存储库。