WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

HerokuでGithubのプライベートリポジトリを`bundle install`する

   

※大体下記のページと同じことを書いています。
Installing a Gem on Heroku from a Private GitHub Repo

Githubの認証トークンを取得

標題のようなケースの場合、Gemfileにgitリポジトリを指定しますが、このときにBASIC認証のアカウントを利用してプライベートリポジトリでの認証をクリアする方法があります。
しかし、ユーザ名やパスワードを埋め込んだGemfileをリポジトリにコミットしたくはありません。

ここでは、BASIC認証ではなく認証トークンを利用します。
認証トークンは以下のコマンドで取得できます。

$ curl -u 'user-name' -d '{"scopes":["repo"],"note":"For Private Repo"}' https://api.github.com/authorizations
Enter host password for user 'kohta-okishima':
{
  "id": ********,
  "url": "https://api.github.com/authorizations/********",
  "app": {
    "name": "For Private Repo",
    "url": "https://developer.github.com/v3/oauth_authorizations/",
    "client_id": "00000000000000000000"
  },
  "token": "****************************************",
  "hashed_token": "****************************************************************",
  "token_last_eight": "********",
  "note": "For Private Repo",
  "note_url": null,
  "created_at": "2015-12-03T11:31:08Z",
  "updated_at": "2015-12-03T11:31:08Z",
  "scopes": [
    "repo"
  ],
  "fingerprint": null
}

取得したトークンの値は環境変数に設定しておきましょう。

$ export GITHUB_TOKEN=token

Gemfileでのリポジトリの指定

下記のようにリポジトリを指定します。

gem '<var>gem-name</var>', git: "https://#{ENV['GITHUB_TOKEN']}:x-oauth-basic@github.com/<var>user-name</var>/<var>gem-name</var>.git"

Herokuに認証トークン情報をセット

下記のようにHeroku側でも環境変数に認証トークンをセットします。

$ heroku run compile -a heroku-app-name
$ heroku config:add GITHUB_TOKEN=token

これで`git push heroku master`などで`bundle install`が実行される時に、プライベートリポジトリがあっても認証が通ります。

 - Git , , , ,