Nice programing

비공개 github 저장소에서 가져올 gem을 어떻게 지정할 수 있나요?

nicepro 2020. 12. 6. 22:03
반응형

비공개 github 저장소에서 가져올 gem을 어떻게 지정할 수 있나요?


사용하려는 Github에 개인 저장소가 있습니다. 내 앱을 Heroku에 배포합니다. gemfile의 소스로 개인 저장소를 어떻게 지정할 수 있습니까? 단순히 말하기로는 충분하지 않을 것이라고 생각합니다.

gem "mygem", :git=>"my github address" 

Heroku 기술 지원의 제안에 따라이 작업을 수행하는 가장 쉬운 방법은 기본 HTTP 인증에서와 같이 사용자 이름과 비밀번호를 URL에 입력하는 것입니다.

gem 'my_gem', :git => 'https://my_username:my_password@github.com/my_github_account/my_repo.git', :ref => 'revision_no'

이것은 우리에게 효과적이었습니다. Gemfile에 암호를 입력해야했기 때문에 여전히 다소 불만족 스럽습니다. 새로운 github 사용자 계정을 추가하고 해당 계정을 gem 프로젝트의 공동 작업자로 추가하여이 문제를 처리했습니다. 여전히 완벽한 보안은 아니지만 그 영향은 더 좁습니다.

내가 읽은 다른 옵션은 자신의 gem 서버설정 하거나 gem공급하는 것 입니다.

2012 년 5 월 16 일 업데이트 : 암호를에 넣는 또 다른 방법 Gemfile은 암호를 환경 변수에 넣는 것입니다. Heroku에서는으로이 작업을 수행 heroku config:add VAR=value한 다음 Gemfile에서이 변수를 사용합니다. 예 :

gem 'my_gem',
  :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
  :ref => 'rev'

이것은 암호, API 키 및 자격 증명을 코드에 넣는 것을 방지하기위한 Heroku의 표준입니다. 로컬 개발 / 테스트의 경우 이러한 환경 변수를 설정할 수 있습니다. 또는 개발 머신이 github에 대한 SSH 액세스를 위해 설정되었다고 가정하면 로컬 개발을위한 자격 증명이 필요하지 않습니다 (SSH 자격 증명은 이미 적용됩니다). 따라서 몇 가지 조건부 논리를 설정할 수 있습니다.

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'

이 마지막 부분은 테스트하지 않았습니다. 의견을 보내주세요.


비공개 저장소에서 가져온 gem을 배포하는 가장 좋은 방법은 GitHub의 OAuth 액세스 를 사용하는 것 입니다. 그렇게하려면 :

  1. 문제의 저장소에 대한 액세스 권한이있는 GitHub 사용자를 만듭니다 (팀에 가장 적합합니다. 개인 액세스 토큰을 노출해도 괜찮다면 자신의 계정을 사용하면됩니다).

  2. 사용자에 대한 GitHub OAuth 토큰을 만듭니다. GitHub API를 통해이 작업을 수행하는 것은 매우 간단합니다 curl. 자세한 내용 은 OAuth API참조하십시오 .

  3. gitGemfile URL에 토큰을 추가하십시오 . 예:

gem 'mygem', git: 'https://xxx123abc:x-oauth-basic@github.com/user_or_team/mygem.git'

현재 Heroku에서이 방법을 사용하고 있으며 훌륭하게 작동합니다. 장점은 자신의 개인 정보를 노출 할 필요가 없으며, 무언가가 손상된 경우 언제든지 토큰을 취소하거나 재생성 할 수 있다는 것입니다.


터미널에서 github에 액세스 할 수있는 경우 ( ssh 키를 github에 업로드하여 ) 간단히 수행 할 수 있습니다.

gem 'my_gem', :git => 'git@github.com:my_user/my_repo.git', :ref => 'revision_no'

내 git 사용자 이름 또는 비밀번호로 내 코드를 오염시키지 않고



@ seth-bro의 답변 외에도 번 들러 bundle config를 사용하여 자격 증명을 구성하는 데 사용할 수 있으므로 Gemfile에 oAuth 토큰을 노출 할 필요가 없습니다.

통사론: bundle config github.com <your_github_oauth_token>

참조 : https://gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743a0 https://bundler.io/v1.16/bundle_config.html


2015 년에도 여전히 관련이 있기를 바랍니다. https://github.com/siassaj/heroku-buildpack-git-deploy-keys 를 github의 배포 키와 함께 사용할 수 있습니다 .

이렇게하면 사용자 이름을 입력하지 않고 Gemfile에 전달하면 Gemfile.lock에서 일반 텍스트로 끝납니다.


env 접근 방식과 heroku labs : enable user_env_compile을 사용할 때 Gemfile.lock에 문제가 없음을 발견했습니다.

참고 URL : https://stackoverflow.com/questions/4840680/how-can-i-specify-a-gem-to-pull-from-a-private-github-repository

반응형