GithubのプライベートリポジトリをGemfileで参照する方法
背景
当社では、社内で共通に使いたい機能をgemに切り出し、機能の利用側のGemfileでプライベートリポジトリを参照しています。
ローカル端末でのみ利用する場合はgitのURLはgit@ やssh@ で始まるURLを使えば問題なくbundle installできます。しかしCI/CD環境でもbundle installするため、httpsで始まるURLで登録しています。
このプライベートリポジトリをbundle install時に参照する方法について記載します。
Personal Access Tokenを使う方法について
こちらのドキュメントに記載があるように、BUNDLE_GITBHUB__COM の環境変数にgithubのPersonal Access Token(PAT)を登録することでbundle install時にプライベートリポジトリを参照する方法があります。しかし、GithubはPATの利用を推奨していません。ドキュメントに非推奨の「GitHub recommends that you use fine-grained personal access tokens instead」といった言及がされています。したがって、当記事ではPAT以外を利用した方法について記載します。
ローカル端末の場合
Github CLIを使う方法
まずCLIをインストールしておきます。Macの場合はbrewコマンドでインストールできます。
次に以下のコマンドを実行するとブラウザが開きますので、Githubの認可を行います。
これで、bundle installが成功します。
git configを使う方法
以下のコマンドを実行します。参考
そうすると、sshで参照するようになるためbundle installが成功します。
CI/CD環境の場合
github actionsやAWS codebuildなどのCI/CD環境について記載します。
Github Appsの作成
まず、https://github.com/organizations/<your_organization_name>/settings/apps/new から、Github Appsを作ります。組織内でのみ利用したいため、「Where can this GitHub App be installed?」の項目は「Only on this account」にチェックしておきます。
パーミッションについては、プライベートリポジトリを参照してbundle installするだけであれば、「Contents:Read-only」を選択するだけで良いでしょう。
作成後にPrivate Keyを作れるようになりますので、ひとつ作成して秘密鍵をダウンロードしておきます。
画面上部に表示されているAppIDを控えます
作成したGithub Appのリポジトリへの導入
Github App 左メニューのInstall Appを選択し、歯車アイコンをクリックします。
必要なリポジトリを選択し、Saveします。
Github Actions
控えておいたGITHUB_APP_IDおよびGITHUB_APP_PRIVATE_KEYを、下図のようにActionのsecretsに、登録しておきます。
Github App経由でtokenを取得します。その値を、環境変数BUNDLE_GITHUB__COM
に設定します。以下にGithub Actionsの設定例を掲載します。
AWS CodeBuild
Github Actionsとやっていることは同じです。Github Appsを用意し、GITHUB_APP_IDとGITHUB_APP_PRIVATE_KEYを使って、Access Tokenを取得します。ただしgithub actionsのように公開された再利用可能ワークフローがないため、自前でスクリプトを実行してtokenを取得します。
GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEYに加え、GITHUB_APP_INSTALLATION_IDをActionのsecretsに登録しておきます。installation idは各リポジトリのSettingsメニューの下部Github Appsを選択し、Github Appsの一覧のConfigureボタンを押した先のURLに含まれています。https://github.com/organizations/<organization_name>/settings/installations/<installation_id> の形式です。このinstallation_idを控えてください。
以下が、buildspec.ymlから呼ぶスクリプトです。
get_github_token.jsの内容は以下のとおりです。クラスメソッドさんのブログ記事より流用、改変しています。
本サイトの更新情報は、X(旧Twitter)の株式会社プレセナ・ストラテジック・パートナーズエンジニア公式で発信しています。ご確認ください。
最終更新