private_repo_credentials = %w(var_private_gem_username var_private_gem_password).
map { |var| ENV[var] }.compact.join(':')
private_repo_credentials << '@' unless private_repo_credentials.empty?
# private_repo_credentials will be "" if neither var is set
# private_repo_credentials will be "username:password@" if they are set
gem 'my_gem',
:git => "https://#{private_repo_credentials}github.com/my_github_account.git",
:ref => 'rev'
9条答案
按热度按时间cmssoen21#
我发现部署从私有回购中提取的gem的最佳方法是使用GitHub's OAuth access。
1.创建一个GitHub用户,可以访问所讨论的repo(最适合团队--如果你可以公开你的个人访问令牌,你可以简单地使用你自己的账户)。
1.为用户创建一个GitHub OAuth令牌,在GitHub API上使用
curl
就可以完成;更多信息请参见OAuth API。1.将令牌添加到您的Gemfile中的
git
url。示例:我目前正在Heroku上使用这种方法,效果很好。好处是你不必暴露自己的个人信息,如果有什么东西被泄露,你可以随时撤销或重新生成令牌。
yqlxgs2m2#
根据Heroku技术支持的建议,最简单的方法是将用户名和密码放入URL中,如Basic HTTP Auth,例如。
这对我们很有效。但我们还是有点不满意,因为我们必须在gem文件中输入密码。我们通过添加一个新的github用户帐户并将该帐户添加为gem项目的合作者来解决这个问题。仍然不是万无一失的安全性,但影响更小。
我读到的其他选项是set up your own gem server或vendor the gem。
**2012年5月16日更新:**避免将密码放入
Gemfile
的另一种方法是将密码放入环境变量;在Heroku上,您可以使用heroku config:add VAR=value
执行此操作,然后在Gemfile
中使用此变量,例如:这是Heroku上的标准,以避免将密码、API密钥和任何凭据放入代码中。对于本地开发/测试,您可以设置这些环境变量。或者,假设您的开发机器设置为通过SSH访问github,则本地开发不需要凭据(SSH凭据已经生效)。因此,您可以设置一些条件逻辑:
我还没有测试这最后一部分。请提供反馈。
qmb5sa223#
这个问题需要一个更好的答案,因为如果您想避免将凭据或oauth令牌放入存储库中,那么可接受的答案和投票最多的答案都不安全。
请不要
或
即使您将它们作为环境变量移动,它们仍将写入您的Gemfile.lock中。
正确的解决方案是将以下内容放在Gemfile中:
并通过以下方式配置Bundler以使用您的Oauth密钥:
使用
repo
范围创建oauth密钥here。现在可以在您的计算机、CI和Heroku上设置env变量
MY_OAUTH_KEY
,以便它们都可以下载gem。在Heroku上,您将设置以下环境变量:
lqfhib0f4#
我发现如果我可以从终端访问github(by uploading an ssh key to github),我可以简单地执行以下操作:
而不会用git用户名或密码污染代码
q43xntqr5#
~/.ssh
目录下~/.ssh/id_rsa.pub
的内容复制到https://github.com/MY_COMPANY/MY_GEM/settings/keysGemfile
中使用:gem 'mygem', github: 'MY_COMPANY/MY_GEM'
bundle install
h9vpoimq6#
除了@seth-bro的答案之外,我们还可以使用
bundle config
来使用bundler配置凭据,这样我们就不需要在Gemfile上公开oAuth令牌。语法:
bundle config github.com <your_github_oauth_token>
参考:https://gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743a0https://bundler.io/v1.16/bundle_config.html
2hh7jdfx7#
希望在2015年仍然相关,你可以使用https://github.com/siassaj/heroku-buildpack-git-deploy-keys和github的部署键。
这样就避免了将用户名和密码放入Gemfile,而这将在Gemfile.lock中以纯文本形式结束
bqucvtff8#
最安全的方法是按照以下方式配置github个人令牌:在按照official documentation创建github个人访问令牌后,执行以下操作:
1.在本地计算机中,执行以下操作:
bundle config github.com YOUR_GITHUB_PERSONAL_TOKEN:x-oauth-basic
1.在heroku中,设置
BUNDLE_GITHUB__COM
ENV变量:BUNDLE_GITHUB__COM = YOUR_GITHUB_PERSONAL_TOKEN
您也可以从终端执行以下操作:
heroku config:set BUNDLE_GITHUB__COM=YOUR_GITHUB_PERSONAL_TOKEN
6yt4nkrj9#
我发现,当使用env方法和heroku实验室:启用user_env_compile时,Gemfile.lock就没有问题了