5. GitHub への移行

Azure DevOps サービス

初期同期が完了すると、リポジトリはカットオーバーの準備が整います。 初期同期を開始してから 21 日以内にカットオーバーを完了します。

Important

通常、カットオーバーは 30 分以内に完了し、その間、Azure DevOps リポジトリは読み取り専用です。 リポジトリは読み取り専用ですが、プッシュとプル要求の更新はブロックされますが、ユーザーは引き続き参照および複製できます。 カットオーバーをスケジュールする前に、影響を受けるすべてのチームに通知します。

カットオーバーをスケジュールする前に

次の条件を確認します。

  • 増分同期は正常で、最新の状態です。
  • GitHub リポジトリのブランチ、タグ、およびプル リクエストが存在し、内容が正しい。
  • 影響を受けるすべてのチームに通知されます。
  • パイプライン、スクリプト、ツール内のハードコーディングされたAzure DevOps URL が更新用に識別されます。

Note

カットオーバーのスケジュール設定、監視、承認には、Azure DevOps CLI を使用します。 カットオーバー後、GitHub ポータルで移行されたリポジトリを検証します。 詳細については、「 移行後のタスクの完了」を参照してください。

カットオーバーのスケジュール

az devops migrations cutover set --org https://dev.azure.com/<org>
                                 --repository-id <repo-guid>
                                 --date "YYYY-MM-DDTHH:MM:SSZ"

タイム ゾーンガイダンス: UTC に Z を追加するか、太平洋標準時の -08:00 などのオフセットを使用します。 タイム ゾーンを省略すると、ローカル タイム ゾーンが想定されます。 チーム間のあいまいさを回避するには、 Z または明示的なオフセットを含めます。

予定されたカットオーバーをキャンセルする

az devops migrations cutover cancel --org https://dev.azure.com/<org>
                                    --repository-id <repo-guid>

Note

cutover cancel コマンドは、移行がまだ同期ステージにある間のみ機能します。 ステージが カットオーバーに進むと、サーバーはキャンセル要求を拒否し、CLI は 0 以外の終了コードを返します。 既に進行中のカットオーバーを停止する必要がある場合は、 az devops migrations abandon 使用するか、ELM チームにお問い合わせください。

切り替え時に何が起こるのか

  1. Azure DevOps リポジトリは、制御された読み取り専用状態になります。
  2. ELM は最終的な同期を実行します。 残りのデルタはGitHubに適用されます。
  3. GitHubは、信頼できる記録の正本となるシステムになります。
  4. Azure DevOps リポジトリ ページに、ユーザーを新しいGitHubの場所にリンクするバナーが表示されます。
  5. 移行状態は[ 移行済み / 移行済み]とマークされます。

カットオーバーの進行状況を監視する

az devops migrations status --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>

移行に status: Succeededstage: Migratedが表示されるまで待ちます。

Note

ELM ジョブは 30 ~ 60 分ごとに実行されます。 移行がカットオーバー ステージに入るとすぐにカットオーバーをスケジュールする場合、カットオーバー ジョブが開始されるまでに最大 60 分かかる場合があります。

Important

カットオーバーが完了すると、GitHubで開かれたプル要求はAzure DevOpsに同期されません。

カットオーバーに向けたレビュー

パイプラインの再配線が有効になっているか、未解決のエラーがスケジュールされたカットオーバー時間に残っている場合、ELM は自動的に続行するのではなく、 ReviewForCutover で移行を一時停止します。 たとえば、一部のプル要求を移行できない場合に、この条件が発生する可能性があります。 エラーを確認し、続行するかどうかを明示的に選択します。

カットオーバーエラーを確認する

az devops migrations cutover review --org https://dev.azure.com/<org>
                                    --repository-id <repo-guid>

このコマンドは、未解決の項目の概要を返します。

フィールド 説明
failedCount 移行に失敗した項目の数。
blockedCount 依存関係によってブロックされる項目の数。
pendingCount まだ保留中のアイテムの数。
totalUnprocessedCount 承認が必要なアイテムの合計数。
failedItems 状態、種類、およびプル要求 URL を持つ未処理の項目の詳細な一覧。

failedItemsの一覧を注意深く確認して、続行する場合に移行されない項目を理解します。

ReviewForCutover内のオプション

エラーを確認したら、次のいずれかのオプションを選択します。

Option それが何をするか いつ使用するか
承認して続行する エラーを受け入れ、カットオーバーに進みます。 すべてのエラーを確認し、それらの項目なしで続行しても問題ありません。
明確なカットオーバー日 同期にリセット します。 移行は同期を継続しています。 最初に問題を修正し、後で新しいカットオーバーをスケジュールする必要があります。
カットオーバーを再スケジュールする 新しいカットオーバー日付を使用して 同期 にリセットします。 az devops migrations cutover set --date <new>をもう一度実行して、新しい日付を設定します。 エラーが新しい日付までに解決された場合、カットオーバーは自動的に続行されます。 より多くの時間が必要です。
移行を削除する 移行レコードを削除します。 監査イベントが書き込まれます。ソース Azure DevOps リポジトリは変更されません。 この移行を完全に中止したいのですね。
移行を一時停止する 手動で再開するまで同期を中断します。 調査中にすべてのアクティビティを一時停止する必要があります。

カットオーバーを承認する

続行する場合は、スキップする項目の数を受け入れてカットオーバーを承認します。

az devops migrations cutover approve --org https://dev.azure.com/<org>
                                     --repository-id <repo-guid>
                                     --accept-failures <N>
                                     --pipelines-verified

<N> を、カットオーバー レビューでの totalUnprocessedCount 以上の値に設定します。

カットオーバー レビューがrequiresPipelineVerificationAcknowledgment: trueを返すときに--pipelines-verifiedを含めます。 このフラグは、再配線されたすべてのパイプラインを確認して確認したことを確認します。 少なくとも 1 つの --accept-failures または --pipelines-verifiedを指定する必要があります。

Warning

承認は元に戻すことができません。 承認を取り消す API はありません。 誤って承認した場合、唯一の復旧パスは az devops migrations abandon 後に移行を再作成することです。

Note

確認した後、承認する前に新しいエラーが表示された場合、コマンドは拒否され、エラー数が一致しなくなった CLIError として HTTP 400 が表示されます。 cutover reviewをもう一度実行し、更新されたtotalUnprocessedCountを書き留めて、承認を再試行します。 スクリプトと自動化は、0 以外の終了コードで一致させることができます。

承認後、移行は ReadyForCutover に移動します。

  • 切り替え日が既にスケジュールされている場合は、スケジュールされた時刻にカットオーバーが自動的に続行されます。
  • カットオーバー日が設定されていない場合は、続行するようにスケジュールします。

次のステップ