GitHubリポジトリを別Organizationへ移行した際の作業記録

GitHubリポジトリのOrganization移行を実施したので、作業の一部始終をブログにしました。
2022.03.31

現在、自分はProfllyというプロフィールビューアーサービスの開発を行っています。

Profllyでは、ソースコードなどの管理はGitHubを利用しています。
最近、Profllyで利用しているリポジトリを別のOrganizationへ移行する機会があったので、その移行記録をブログにしてみます。

GitHubリポジトリ移行のざっくりとした流れ

今回、リポジトリの移行は主に以下のような流れで実施しました。

  1. 移行先Organizationへのリポジトリ移行
  2. 連携先AWSサービスでのリポジトリ再接続
  3. SlackへのSubscribe/Scheduled Reminder設定

それでは、以下よりそれぞれのフェーズで実際に行った作業を見ていきます。

移行先Organizationへのリポジトリ移行

早速ですが、現行のリポジトリを移行先となるOrganizationアカウントへ移行していきます。
まずは以下を参照し、現行のリポジトリが問題なく移行できそうかどうかを確認します。

GitHub Docs - リポジトリを移譲する

また、事前に移行元/移行先のOrganizationでリポジトリ移譲に関して適切な権限を設定し、移行作業に問題がないことを確認しておきます。

GitHub Docs - リポジトリを削除または移譲する権限を設定する

次に対象リポジトリを開き、 Settings > General > Danger Zone から、Transfer ownership を実施してリポジトリを移行してみます。

ダイアログが開くので移行先のOrganization Nameを入力し、確認として現在の User(Org)name/repo を入力して「I understand, transfer this repository.」をクリックすれば、即時リポジトリが移行されます

リポジトリそのものはサクッと移行ができてイイ感じですね。移行先のOrganizationにリポジトリが無事移行されていることを確認しておきます。

ProfllyではリポジトリはMonorepoではなく複数リポジトリを管理しているので、リポジトリ分だけ上記の移行作業を繰り返します。

連携先AWSサービスでのリポジトリ再接続

リポジトリが移行できたので、次はGitHubリポジトリと連携しているサービスの再設定を行っていきます。

Profllyでは、ホスティングおよびCI/CDにAmplify Console, CodeBuildを利用しています。
(詳細はProfllyを支えるアーキテクチャや技術スタックを紹介します(月刊Proflly2022年2月号)に書いているので、宜しければそちらもご覧ください)

リポジトリを移行したことによりこれらの連携先ソースの再設定が必要となるので、マネジメントコンソールから再設定を行っていきます。

Amplify Console

Amplify Consoleの画面を開き、対象となるアプリの 全般 から 「リポジトリを再接続」をクリックします。

再接続のダイアログが開きますが、「再接続する前にGitHubリポジトリ側のWebhookを削除しといてね」との注意書きが。

文言に従い、GitHubリポジトリの Settings > Webhooks を開いて、前回設定した際に登録されたWebhookをDeleteしておきます。
(対象のWebhookが複数あるのは、Profllyではdevelopment/staging/production環境ごとにAWSアカウントが分かれており、それぞれのAmplify Consoleと接続しているためです)

既存のWebhookが削除できたら、リポジトリ一覧から移行先のOrganization/repoを選択し、「確認」をクリックするとリポジトリが再接続されます。

※リポジトリ一覧で移行先のOrganizationのリポジトリが表示されない場合は、移行先OrganizationのThird-Party AccessでAWS Amplifyの使用が許可されているかどうか確認してみてください。

Profllyではdevelopment/staging/production環境ごとにAWSアカウントが分かれているため、それぞれのAWSアカウントでAmplifyのアプリ分同様の再接続作業を実施します。

CodeBuild

次に、CIで利用しているCodeBuildのリポジトリ再設定を行っていきます。

AWS CodeBuild - Change a build project's settings (console)

CodeBuildの画面を開き、再設定が必要となるビルドプロジェクトを選択して 編集 > ソース をクリックします。

ソースの編集画面が開くので、GitHubリポジトリ で移行先の Organization/Repo を選択します。

「ソースの更新」をクリックしてリポジトリの再設定は完了です。

移行が必要なビルドプロジェクト分、同様の再設定作業を実施します。
また、必要に応じてビルドが問題なく実行されるかトリガーして確認しておきましょう。

SlackへのSubscribe/Scheduled Reminder設定

プロジェクトではGitHubとSlackを連携し、必要な通知をSlackへ送るように設定しています。
こちらもリポジトリの移行により再設定が必要なので設定していきます。

事前に、Organization側のGitHub AppsでSlackをインストールしておきます。

Subscribe

GitHub App + Subscribeを利用して対象リポジトリの通知をチャンネルに流すようにしているので、Subscribeを再設定します。

Slackヘルプセンター - GitHub と Slack を連携させる

リポジトリを移行したところ、Slack側では自動的にUnsubscribeされていました。

対象のSlackチャンネルにて以下のスラッシュコマンドを実行し、もう一度(自分たちが欲しい情報の)Subscribeの設定をしておきます。

/github subscribe [org/repo] reviews,comments
/github unsubscribe [org/repo] commits

Scheduled Reminder

また、チームではGitHubのScheduled Reminder機能を利用してプルリクエストのリマインドを行っています。

GitHub Docs - Team のスケジュールされたリマインダーを管理する

GitHubのTeam単位でScheduled Reminderを設定しているので、移行先Organizationの新しいチームのページにて Settings > Scheduled Reminder から新しいreminderを作成します。

通知したいSlackワークスペース + チャンネルを指定し、リマインドしたいリポジトリを選択します。
また、リマインドに必要なオプションを設定しreminderを作成します。

reminderを作成したら、必要に応じて📣ボタンでチャンネルにテスト通知しておきます。

これにて、GitHubリポジトリのOrganization移行に伴う全ての作業は完了です!

おわりに

GitHubのリポジトリを別のOrganizationアカウントへ移行する機会があったので、実際に行った作業の一部始終を書きました。
次に別のOrganizationへ移行することになったら、このエントリを見返して対応したいと思います。

(将来の自分も含め)どなたかの参考になれば幸いです。