はじめに
株式会社ゆめみ Advent Calendar 2023の4日目の記事です
BitriseとGitHubの連携における課題
BitriseをCI環境で利用する際、Dangerを実行するためにGitHubのPersonal Access Tokensを使用していました。
GitHub Actionsの様に、GITHUB_TOKEN
は利用できないためです
GitHub Personal Access Tokensの使用に伴う懸念点
管理ユーザのPersonal Access Tokensを使用していたため権限が強く
流出した時のセキュリティリスクが高い問題があり、社内でメンバー(@s6n)からプロリク1が出されました
GitHub Appsの導入
GitHub Appsの設定手順
他でも解説記事があるので見たい人だけ
-
GitHubの「Developer settings」の「New GitHub Apps」から作成する
- 直接Organizationに作成する権限がある場合
-
https://github.com/organizations/ORGS/settings/apps
から
-
- 権限がない場合は、Developer settingsで作成
- 直接Organizationに作成する権限がある場合
-
GitHub Appsの設定
- GitHub App name: 必須です、公開されます。アプリケーションのpublicなURLにもなります
https://github.com/apps/yumemi-pat-expulsion - 説明: 必須です、公開されます
- Homepage URL: 必須です、公開されます
- Callback URL: Danger用途では不要
- Expire user authorization tokens: チェックをつけると
refresh_token
ができるようになりますDanger用途では不要 - Request user authorization (OAuth) during installation: OAuthを使わないので、Danger用途では不要
- Enable Device Flow: デバイス認証を組み込みます、Danger用途では不要
- Webhook: Danger用途では不要なので、チェックを外します
- Permissions
- Repository permissions
- Commit statuses, Issues, Pull requests: Read and write
- Repository permissions
- Where can this GitHub App be installed?: 他のユーザやORGSへインストールしても使えないので、Only on this accountを 🔘
- GitHub App name: 必須です、公開されます。アプリケーションのpublicなURLにもなります
-
private keyの作成
-
移行
-
インストール
- ORGSにアプリケーションをインストールし、対象のリポジトリを選択します
GitHub Appsへの移行
GitHub Appsを呼び出すStepはBitriseに用意されていないので
scriptsで書いてもよかったのですが、対象のリポジトリが多いためStepを作成しました
private keyとApp IDを使って、GitHub Appsへtokenの発行リクエストを行います
private keyを扱うため、ご利用は自己責任の範囲でお願いします
BitriseのAPIを使って、指定SlugのGENERIC FILE STORAGEからDLを行います
private keyを複数のリポジトリへ配置したくなかったので、作成しました
Personal Access Tokensを扱うため、ご利用は自己責任の範囲でお願いします
使い方
-
step: github-app-tokenの呼び出し
bitrise.ymlでDangerを呼び出す前に追記bitrise.ymlsteps: - git::https://github.com/yumemi-inc/bitrise-step-github-app-token@2.0.0: inputs: - github_app_id: {作成したGitHub AppsのApp ID} - ...
-
private keyをBitriseに登録
-
Secretsを使う場合
-
GENERIC FILE STORAGEを使う場合
- 作成したGitHub Appsのprivate keyをGENERIC FILE STORAGEへ登録
-
Generic File StorageでDL
- bitrise-step-github-app-tokenの設定
- github_app_key_path: $GENERIC_FILE_STORAGE/{1.で登録したファイル名}
-
Bitriseで別slugのGENERIC FILE STORAGEを使う場合
- 作成したGitHub Appsのprivate keyを別slugのGENERIC FILE STORAGEへ登録
- download-bitrise-generic-fileを使います2
bitrise.ymlsteps: - git::https://github.com/yumemi-inc/bitrise-step-download-bitrise-generic-file.git@0.0.2: inputs: - BITRISE_API_TOKEN: $BITRISE_API_TOKEN - BITRISE_APP_SLUG: {1.で登録した時のslug} - TARGET_BITRISE_FILE_KEY: {1.で登録したFile Storage ID} - OUTPUT_FILE_NAME: private-key.pem
-
-
Dangerで使うTokenにGITHUB_APP_TOKENを指定する
DANGER_GITHUB_API_TOKEN=$GITHUB_APP_TOKEN swift run danger-swift ci
参考
- シェルスクリプトで GitHub App のインストールアクセストークンを取得する
- BitriseでGitHub Appのトークンを取得してDangerを動かす
- GitHub Apps + Dangerをやってみる
- 新しいステップの開発
-
BITRISE_API_TOKENにはBitriseのPersonal Access Tokensを発行してください ↩