データ常駐企業間の移行について
2 つのデータ常駐企業間の移行では、標準の GEI アーカイブ移行フローが使用されます。
- GEI はソース GHE.com サブドメインに接続します。
- GEI は、リポジトリ データを含むアーカイブを生成します。
- GEI は、サポートされている移行ストレージにアーカイブをアップロードします。
- GEI は、ターゲット GHE.com サブドメインでリポジトリの移行を開始します。
- 転送先 Importer はアーカイブをダウンロードして処理します。
この移行では、次の操作を行います。
- ソースは、
https://SOURCE_SUBDOMAIN.ghe.comなどのGHE.comサブドメインです。 - 宛先は、
https://DESTINATION_SUBDOMAIN.ghe.comなど、別のGHE.comサブドメインです。 - 移行元と移行先の組織は、異なる名前を持つことができます。
- 移行されたリポジトリは、移行先組織で別の名前を持つことができます。
ソース API エンドポイントと宛先 API エンドポイントは、個別に指定する必要があります。 ソース操作には宛先 API URL を使用しないでください。
重要
データ所在地付き GitHub Enterprise Cloud API URL では、 https://api.SUBDOMAIN.ghe.com形式が使用されます。 これは、通常、https://HOSTNAME/api/v3形式を使用するGitHub Enterprise Server API URL とは異なります。
前提条件
準備:
- ソースと宛先がサブドメイン GHE.com 異なっていることを確認します。
- 移行元組織と移行先組織の両方で、自分が組織の所有者であるか、移行元ロールが付与されていることを確認します。
- ソース組織用のpersonal access token (classic)を作成します。
- 移行先組織の personal access token (classic) を作成します。 必要なスコープについては、 GitHub 製品間の移行のためのアクセスの管理 を参照してください。
- 運用移行を実行する前に、試用版の移行を実行します。
運用移行中は、ソース リポジトリの作業を一時的に停止することをお勧めします。 GitHub Enterprise Importer は差分移行を実行しないため、移行の開始後に行われた変更は自動的には含まれません。
移行されたデータと既知の制限事項については、 GitHub Enterprise Importer を使用したGitHub製品間の移行について を参照してください。
GitHub CLIと GEI をインストールする
GitHub CLIをインストールし、GEI 拡張機能をインストールします。
gh extension install github/gh-gei
gh extension install github/gh-gei
移行を開始する前に拡張機能を更新します。
gh extension upgrade github/gh-gei
gh extension upgrade github/gh-gei
使用可能なオプションを表示するには:
gh gei migrate-repo --help
gh gei migrate-repo --help
環境変数の設定
両方の企業の personal access tokenを設定します。
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN" export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"
各 GHE.com サブドメインの API URL を設定します。
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com" export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"
SOURCE_SUBDOMAINとDESTINATION_SUBDOMAINを、移行元企業と移行先企業のサブドメインに置き換えます。
例えば次が挙げられます。
export SOURCE_API_URL="https://api.source-example.ghe.com" export TARGET_API_URL="https://api.destination-example.ghe.com"
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"
GH_SOURCE_PAT トークンは、アーカイブの生成を含むソース側の操作に使用されます。
GH_PAT トークンは、宛先側の操作に使用されます。
アーカイブ BLOB ストレージを構成する
GitHub Enterprise Importer は、各プロジェクトをアーカイブにエクスポートし、そのアーカイブを読み取り可能な BLOB ストレージ GitHub アップロードします。 移行を実行するときに、ストレージ バックエンドを選択します。
| ストレージオプション | それを選択する方法 | 注記 |
|---|
GitHub-owned blob storage (推奨) | --use-github-storage | セットアップは必要ありません。
GitHub は、移行が成功した後、または移行が失敗してから 7 日後にアーカイブを自動的に削除します。
AWS S3 |
--aws-bucket-name ( AWS_REGION、 AWS_ACCESS_KEY_ID、および AWS_SECRET_ACCESS_KEY 環境変数を使用し、必要に応じて AWS_SESSION_TOKEN) | バケットとそのライフサイクルを所有している。
GitHub は、ストレージからアーカイブを削除しません。
Azure Blob Storage |
AZURE_STORAGE_CONNECTION_STRING 環境変数 (単一の migrate-repo コマンドの場合は、代わりに --azure-storage-connection-string を使用できます) | ストレージ アカウントのアクセス キー接続文字列のみがサポートされています (SAS はサポートされていません)。
GitHub は、ストレージからアーカイブを削除しません。
1 つのリポジトリを移行する
1 つのリポジトリを移行するには、 gh gei migrate-repo コマンドを使用します。
gh gei migrate-repo \ --github-source-org SOURCE_ORGANIZATION \ --source-repo SOURCE_REPOSITORY \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org DESTINATION_ORGANIZATION \ --target-repo DESTINATION_REPOSITORY \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei migrate-repo \
--github-source-org SOURCE_ORGANIZATION \
--source-repo SOURCE_REPOSITORY \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org DESTINATION_ORGANIZATION \
--target-repo DESTINATION_REPOSITORY \
--target-api-url "$TARGET_API_URL" \
--verbose
プレースホルダーを次の値に置き換えます。
| プレースホルダー | 説明 |
|---|---|
SOURCE_ORGANIZATION | ソース エンタープライズ内のリポジトリを所有する組織。 |
SOURCE_REPOSITORY | ソース組織のリポジトリの名前。 |
DESTINATION_ORGANIZATION | 移行先企業で移行されたリポジトリを所有する組織。 |
DESTINATION_REPOSITORY | 移行先組織の新しいリポジトリの名前。 |
例えば次が挙げられます。
gh gei migrate-repo \ --github-source-org source-org \ --source-repo example-repository \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org destination-org \ --target-repo example-repository \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei migrate-repo \
--github-source-org source-org \
--source-repo example-repository \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org destination-org \
--target-repo example-repository \
--target-api-url "$TARGET_API_URL" \
--verbose
--target-repoを省略すると、GEI はソース リポジトリ名を使用します。
省略可能な引数。
移行コマンドには、次のオプションを追加できます。
| Argument | 説明 |
|---|---|
--target-repo-visibility TARGET-VISIBILITY | 新しいリポジトリの可視性を設定します。 サポートされている値は、private および internal です。 |
--skip-releases | リリースなしでリポジトリを移行します。 |
--queue-only | 移行の完了を待たずに、移行をキューに追加します。 |
--verbose | 追加の移行出力を表示します。 |
例えば次が挙げられます。
gh gei migrate-repo \ --github-source-org source-org \ --source-repo example-repository \ --github-source-api-url "$SOURCE_API_URL" \ --github-target-org destination-org \ --target-repo example-repository \ --target-api-url "$TARGET_API_URL" \ --target-repo-visibility internal \ --verbose
gh gei migrate-repo \
--github-source-org source-org \
--source-repo example-repository \
--github-source-api-url "$SOURCE_API_URL" \
--github-target-org destination-org \
--target-repo example-repository \
--target-api-url "$TARGET_API_URL" \
--target-repo-visibility internal \
--verbose
複数のリポジトリを移行する
複数のリポジトリの場合は、 gh gei generate-scriptを使用します。
gh gei generate-script \ --github-source-org SOURCE_ORGANIZATION \ --github-target-org DESTINATION_ORGANIZATION \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL" \ --output migration-script.ps1
gh gei generate-script \
--github-source-org SOURCE_ORGANIZATION \
--github-target-org DESTINATION_ORGANIZATION \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL" \
--output migration-script.ps1
生成されたスクリプトを実行する前に確認します。 次のようにすることができます。
- 移行すべきでないリポジトリを削除します。
- 宛先リポジトリ名を変更します。
- 宛先リポジトリの可視性を変更します。
--skip-releasesなどのオプションを追加します。- 移行ごとにログをダウンロードする
--download-migration-logsを追加します。
生成されたスクリプトを PowerShell で実行します。
pwsh ./migration-script.ps1
pwsh ./migration-script.ps1
移行の状態を確認する
--queue-onlyを使用して移行を開始した場合は、GEI によって出力された移行 ID を使用して監視します。
gh gei wait-for-migration \ --migration-id MIGRATION_ID \ --target-api-url "$TARGET_API_URL" \ --verbose
gh gei wait-for-migration \
--migration-id MIGRATION_ID \
--target-api-url "$TARGET_API_URL" \
--verbose
MIGRATION_IDを、gh gei migrate-repoによって返される ID に置き換えます。
メモ
チェック時に両方の API URL 引数を含めます。 ソース側の移行情報とログを取得する GEI コマンドには、ソース API URL が必要です。
移行ログのダウンロード
移行ログをダウンロードするには:
gh gei download-logs \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
gh gei download-logs \
--migration-id MIGRATION_ID \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
移行が成功と報告された場合でも、ログで警告とエラーを確認します。
移行を中止する
キューに入っている、または実行中の移行を中止するには:
gh gei abort-migration \ --migration-id MIGRATION_ID \ --github-source-api-url "$SOURCE_API_URL" \ --target-api-url "$TARGET_API_URL"
gh gei abort-migration \
--migration-id MIGRATION_ID \
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
Troubleshooting
ソース テナントに接続できません
次のことを確認します。
--github-source-api-urlはソース サブドメインに設定されます。- URL は
https://api.SUBDOMAIN.ghe.com形式を使用します。 - ソース トークンは
GH_SOURCE_PATに格納されます。 - トークンは、ソース組織とリポジトリにアクセスできます。
移行先テナントに到達できません
次のことを確認します。
--target-api-urlは宛先サブドメインに設定されます。- URL は
https://api.SUBDOMAIN.ghe.com形式を使用します。 - 宛先トークンは、
GH_PATに格納されます。 - 宛先組織にリポジトリを作成するアクセス許可がある。
アーカイブの生成またはアップロード中に移行が失敗する
移行の出力とログを確認し、次のことを確認します。
- 移行アーカイブ ストレージが正しく構成されています。
- ストレージ プロバイダーは、移行サービスからアクセスできます。
- 移行中にソース リポジトリが変更されていません。
- ソース API URL と宛先 API URL がスワップされていません。
ログをダウンロードできない
download-logs、wait-for-migration、またはabort-migrationを使用する場合は、移行の開始に使用するのと同じソース API URL と移行先 API URL を指定します。
--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"
ソース URL が拒否される
GHE.com エンドポイントではなく、GitHub Enterprise Server サブドメイン API エンドポイントを使用していることを確認します。
次のコマンドを使用します。
https://api.SUBDOMAIN.ghe.com
使用しないでください:
https://HOSTNAME/api/v3
/api/v3形式はGitHub Enterprise Serverソースを対象としており、データ所在地付き GitHub Enterprise Cloudの正しい形式ではありません。