Skip to main content
ドキュメントへの更新が頻繁に発行されており、このページの翻訳はまだ行われている場合があります。 最新の情報については、「英語のドキュメント」を参照してください。

Bitbucket Server から GitHub Enterprise Cloud へのリポジトリの移行

GitHub CLI を使用して、Bitbucket Server から GitHub Enterprise Cloud にリポジトリを移行することができます。

注: 現在、GitHub Enterprise Importer を使った Bitbucket Server からの移行はプライベート ベータ版であり、変更される可能性があります。 ベータ版へのアクセスを要求するには、「Bitbucket Server 移行待機リストに参加する」を参照してください。

GitHub Enterprise Importer を使ったリポジトリの移行について

GitHub CLI を使用して、BitBucket Server インスタンスから個々のリポジトリまたはすべてのリポジトリを移行できます。

現時点では、GitHub API を使用した Bitbucket Server からの移行はサポートされていません。

前提条件

  • Importer の既知のサポート制限事項を確実に理解するには、「GitHub Enterprise Importer について」をご覧ください。
  • 移行の試験的実行を行い、そのすぐ後で運用環境の移行を完了することを強くお勧めします。 試験的実行のベスト プラクティスについて詳しくは、「GitHub Enterprise Importer を使用した移行の実行を準備する」をご覧ください。
  • 必須ではありませんが、運用環境の移行の間は作業を停止することをお勧めします。 Importer は差分移行をサポートしていないため、移行中に発生した変更は移行されません。 運用環境の移行の間に作業を停止しない場合は、これらの変更を手動で移行する必要があります。
  • GitHub.com の移行先の Organization では、Organization 所有者であるか、移行者ロールを持っている必要があります。 詳しくは、「GitHub Enterprise Importer に移行者ロールを付与する」を参照してください。
  • 管理者またはスーパー管理者のアクセス許可がある Bitbucket Server アカウントのユーザー名とパスワードが必要です。

手順 1: BBS2GH extension of the GitHub CLI をインストールする

これが初めての移行の場合は、BBS2GH extension of the GitHub CLI をインストールする必要があります。 GitHub CLI について詳しくは、「GitHub CLI について」をご覧ください。

  1. GitHub CLI をインストールします。 GitHub CLI のインストール手順については、GitHub CLI リポジトリを参照してください。

    注: GitHub CLI のバージョン 2.4.0 以降が必要です。 gh --version コマンドを使って、インストールされているバージョンを確認できます。

  2. BBS2GH extension をインストールします。

    Shell
    gh extension install github/gh-bbs2gh

BBS2GH extension に関するヘルプが必要なときはいつでも、コマンドで --help フラグを使用できます。 たとえば、gh bbs2gh --help とすると使用可能なすべてのコマンドの一覧が表示され、gh bbs2gh migrate-repo --help とすると migrate-repo コマンドで使用できるすべてのオプションの一覧が表示されます。

手順 2: BBS2GH extension of the GitHub CLI を更新する

BBS2GH extension of the GitHub CLI は毎週更新されます。 最新バージョンを確実に使うため、拡張機能を更新してください。

Shell
gh extension upgrade github/gh-bbs2gh

手順 3: 環境変数を設定する

BBS2GH extension を使って GitHub Enterprise Cloud に移行するには、その前に、移行先の Organization にアクセスできる personal access token を作成してから、personal access token を環境変数として設定する必要があります。

また、Bitbucket Server のユーザー名とパスワードの環境変数を設定し、Bitbucket Server インスタンスが Windows で実行されている場合は SMB パスワードを設定する必要があります。

  1. GitHub Enterprise Cloud 上の移行先 Organization に対して認証を行う personal access token (classic) を作成して記録し、トークンがすべての要件を満たしていることを確認します。 詳しくは、「GitHub Enterprise Importer のアクセスの管理」を参照してください。

  2. 環境変数を設定し、TOKEN は先ほど記録した personal access token、USERNAME は管理者またはスーパー管理者のアクセス許可を持つ Bitbucket Server アカウントのユーザー名、PASSWORD は Bitbucket Server アカウントのパスワードに置き換えます。

    • ターミナルを使っている場合は、export コマンドを使います。

      Shell
      export GH_PAT="TOKEN"
      export BBS_USERNAME="USERNAME"
      export BBS_PASSWORD="PASSWORD"
      # If your Bitbucket Server instance runs on Windows
      export SMB_PASSWORD="PASSWORD"
    • PowerShell を使っている場合は、$env コマンドを使います。

      Shell
      $env:GH_PAT="TOKEN"
      $env:BBS_USERNAME="USERNAME"
      $env:BBS_PASSWORD="PASSWORD"
      # If your Bitbucket Server instance runs on Windows
      $env:SMB_PASSWORD="PASSWORD"

手順 4: BLOB ストレージを設定する

多くの Bitbucket Server インスタンスはファイアウォールの背後にあるため、GitHub CLI では、インターネットから到達可能なデータを格納するための中間的な場所として BLOB ストレージが使用されます。

最初に、移行するデータのアーカイブを生成し、ファイアウォールの背後から BLOB ストレージにデータをプッシュします。

GitHub CLI は、次の BLOB ストレージ プロバイダーをサポートしています。

  • アマゾン ウェブ サービス (AWS) S3
  • Azure Blob Storage

移行を実行する前に、選んだクラウド プロバイダーでストレージ コンテナーを設定してデータを格納する必要があります。

AWS S3 ストレージ バケットの設定

AWS で、S3 バケットを設定します。 詳しくは、AWS のドキュメント「バケットの作成」をご覧ください。

バケットに read-write でアクセスできる AWS アクセス キーと秘密鍵も必要です。

注: GitHub Enterprise Importer は、移行の完了後に AWS からアーカイブを削除しません。 ストレージ コストを減らすため、一定期間後にアーカイブが自動削除されるよう構成することをお勧めします。 詳しくは、AWS のドキュメントの「バケットのライフサイクル設定の指定」をご覧ください。

移行を実行する準備ができたら、リージョン、アクセス キー、シークレット キー、セッション トークンなどの AWS 資格情報を GitHub CLI に提供します (必要な場合)。 引数として渡すことも、AWS_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN という環境変数を設定することもできます。

また、--aws-bucket-name 引数を使って S3 バケットの名前で渡す必要があります。

Azure Blob Storage ストレージ アカウントの設定

Azure でストレージ アカウントを作成し、接続文字列を記録しておきます。 詳しくは、Microsoft Docs の「ストレージ アカウント アクセス キーを管理する」をご覧ください。

注: GitHub Enterprise Importer は、移行の完了後に Azure Blob Storage からアーカイブを削除しません。 ストレージ コストを減らすため、一定期間後にアーカイブが自動削除されるよう構成することをお勧めします。 詳しくは、Microsoft Docs の「データ ライフサイクルを自動管理してコストを最適化する」をご覧ください。

移行を実行する準備ができたら、接続文字列を引数として GitHub CLI に渡すか、AZURE_STORAGE_CONNECTION_STRING という名前の環境変数を使って渡すことができます。

手順 5: リポジトリを移行する

gh bbs2gh migrate-repo コマンドを使ってリポジトリを移行できます。

既定では、リポジトリを移行するときに、BBS2GH extension of the GitHub CLI によって次の手順が行われます。

  1. Bitbucket Server インスタンスに接続し、リポジトリごとに移行アーカイブを生成します
  2. SFTP (Linux) または SMB (Windows) を使用して、移行アーカイブを Bitbucket Server インスタンスから BBS2GH extension of the GitHub CLI を実行しているコンピューターにダウンロードします
  3. 移行アーカイブを任意の BLOB ストレージ プロバイダーにアップロードします
  4. BLOB ストレージ プロバイダーに格納されているアーカイブの URL を使用して、GitHub Enterprise Cloud で移行を開始します
  5. 移行アーカイブを削除します

または、GitHub CLI を使ってアーカイブを生成し、そのアーカイブを手動でダウンロードしてから、GitHub CLI を使って移行を続けることもできます。

移行アーカイブをダウンロードすることを GitHub CLI に許可する

1 つのリポジトリを移行するには、gh bbs2gh migrate-repo コマンドを使います。

You must follow this step from a computer that can access:

  • Your Bitbucket Server instance via HTTPS
  • Your Bitbucket Server instance via SFTP, if your Bitbucket Server instance runs on Linux. In general, if you can access the server via SSH, then you can also use SFTP.
  • Your Bitbucket Server instance via SMB, if your Bitbucket Server instance runs on Windows
  • Your chosen blob storage provider
Shell
gh bbs2gh migrate-repo --bbs-server-url BBS-SERVER-URL \
  --bbs-project PROJECT --bbs-repo CURRENT-NAME \
  --github-org DESTINATION --github-repo NEW-NAME \
  # Use the following options if your Bitbucket Server instance runs on Linux
  --ssh-user SSH-USER --ssh-private-key PATH-TO-KEY
  # Use the following options if your Bitbucket Server instance runs on Windows
  --smb-user SMB-USER
  # Use the following option if you're using AWS S3 as your blob storage provider
  --aws-bucket-name AWS-BUCKET-NAME

上のコマンドのプレースホルダーを次の値に置き換えます。

プレースホルダー | 値 | ----------- | ----- | BBS-SERVER-URL | Bitbucket Server インスタンスの URL PROJECT | 移行するリポジトリの Bitbucket Server プロジェクト用のキー CURRENT-NAME | 移行するリポジトリの名前 DESTINATION | 移行先の Organization の名前 NEW-NAME | The name you want the migrated repository to have SSH-USER | Bitbucket Server インスタンスが Linux 上で実行されている場合、SSH 経由で Bitbucket Server に接続するときに使うユーザー名 PATH-TO-KEY | Bitbucket Server インスタンスが Linux 上で実行する場合は、SSH 秘密キーへのパス (例: ~/.ssh/id_rsa)。 SSH キーの要件については、「GitHub Enterprise Importer のアクセスの管理」をご覧ください。 SMB-USER | Bitbucket Server インスタンスが Windows 上で実行されている場合、SMB 経由で Bitbucket Server に接続するときに使うユーザー名 AWS-BUCKET-NAME | AWS S3 バケットのバケット名

注: Renci.SshNet を示すエラーが発生した場合、CLI では、移行アーカイブをダウンロードするためにサーバーへの SFTP 接続を確立する際に Issue が発生しています。 これらの Issue をトラブルシューティングする方法については、「GitHub Enterprise Importer を使用した移行のトラブルシューティング」を参照してください。

移行アーカイブを手動でダウンロードする

BBS2GH extension of the GitHub CLI の既定では、SFTP または SMB を使って Bitbucket Server インスタンスからの移行アーカイブのダウンロードを含め、移行全体が実行されます。

ただし、サーバーが SFTP アクセスを提供していない場合など、移行アーカイブを手動でダウンロードすることを好むお客様もいます。 その場合は、GitHub CLI を使ってアーカイブを生成し、そのアーカイブを手動でダウンロードしてから、GitHub CLI を使って移行を続けることもできます。

以下のようにアクセスできるコンピューターからこの手順に従う必要があります。

  • HTTPS 経由で Bitbucket Server インスタンス
  • 選んだ BLOB ストレージ プロバイダー

まず、次の引数のみを指定して gh bbs2gh migrate-repo コマンドを実行します。

Shell
gh bbs2gh migrate-repo --bbs-server-url BBS-SERVER-URL \
  --bbs-project PROJECT \
  --bbs-repo CURRENT-NAME

上のコマンドのプレースホルダーを次の値に置き換えます。

プレースホルダー | 値 | ----------- | ----- | BBS-SERVER-URL | Bitbucket Server インスタンスの URL PROJECT | 移行するリポジトリの Bitbucket Server プロジェクト用のキー CURRENT-NAME | 移行するリポジトリの名前

移行アーカイブが生成され、コマンド出力にパスが出力されます。

[12:14] [INFO] Export completed. Your migration archive should be ready on your
instance at $BITBUCKET_SHARED_HOME/data/migration/export/Bitbucket_export_9.tar

一般に、$BITBUCKET_SHARED_HOME は Linux では /var/atlassian/application-data/bitbucket/shared、Windows では C:\Atlassian\ApplicationData\Bitbucket\Shared に設定されますが、サーバーの構成によって異なる場合があります。 共有ホーム ディレクトリを特定する方法については、「GitHub Enterprise Importer を使用した移行のトラブルシューティング」を参照してください。

Bitbucket Server インスタンスから移行アーカイブをダウンロードし、GitHub CLI を実行しているマシンにアーカイブを格納します。

移行アーカイブを GitHub にインポートするには、別の引数セットを指定して gh bbs2gh migrate-repo コマンドをもう一度実行します。

Shell
gh bbs2gh migrate-repo --archive-path ARCHIVE-PATH \
  --github-org DESTINATION --github-repo NEW-NAME \
  # Use the following option if you're using AWS S3 as your blob storage provider
  --aws-bucket-name AWS-BUCKET-NAME

上のコマンドのプレースホルダーを次の値に置き換えます。

プレースホルダー | 値 | ----------- | ----- | ARCHIVE-PATH | お使いのインスタンスからダウンロードした Bitbucket Server 移行アーカイブのパス DESTINATION | 移行先の Organization の名前 NEW-NAME | The name you want the migrated repository to have AWS-BUCKET-NAME | AWS S3 バケットのバケット名

手順 6: 移行を検証し、エラー ログを確認する

When your migration is complete, we recommend reviewing your migration log. For more information, see "GitHub Enterprise Importer の移行ログへのアクセス."

We recommend that you review your migrated repositories for a soundness check.

手順 7: 複数のリポジトリを移行する

複数のリポジトリを GitHub Enterprise Cloud に一度に移行したい場合は、GitHub CLI を使って移行スクリプトを生成します。 結果のスクリプトには、リポジトリごとに 1 つの移行コマンドのリストが含まれます。

注: スクリプトを生成すると、PowerShell スクリプトが出力されます。 ターミナルを使っている場合は、.ps1 ファイル拡張子を持つスクリプトを出力し、Mac または Linux 用の PowerShell をインストールして実行する必要があります。

移行スクリプトの生成

HTTPS 経由で Bitbucket Server インスタンスにアクセスできるコンピューターからこの手順に従う必要があります。

移行スクリプトを生成するには、gh bbs2gh generate-script コマンドを実行します。

Shell
gh bbs2gh generate-script --bbs-server-url BBS-SERVER-URL \
  --github-org DESTINATION \
  --output FILENAME \
  # Use the following options if your Bitbucket Server instance runs on Linux
  --ssh-user SSH-USER --ssh-private-key PATH-TO-KEY
  # Use the following options if your Bitbucket Server instance runs on Windows
  --smb-user SMB-USER

移行された各リポジトリの移行ログをダウンロードするスクリプトが必要な場合は、--download-migration-logs フラグを追加します。 移行ログについて詳しくは、「GitHub Enterprise Importer の移行ログへのアクセス」をご覧ください。

上のコマンドのプレースホルダーを次の値に置き換えます。

プレースホルダー | 値 | ----------- | ----- | BBS-SERVER-URL | Bitbucket Server インスタンスの URL DESTINATION | 移行先の Organization の名前 FILENAME | 結果の移行スクリプトのファイル名

ターミナルを使っている場合は、生成されたスクリプトの実行に PowerShell が必要なので、.ps1 ファイル拡張子を使います。 Mac 用または Linux 用の PowerShell をインストールできます。 SSH-USER | Bitbucket Server インスタンスが Linux 上で実行されている場合、SSH 経由で Bitbucket Server に接続するときに使うユーザー名 PATH-TO-KEY | Bitbucket Server インスタンスが Linux 上で実行する場合は、SSH 秘密キーへのパス (例: ~/.ssh/id_rsa)。 SSH キーの要件については、「GitHub Enterprise Importer のアクセスの管理」をご覧ください。 SMB-USER | Bitbucket Server インスタンスが Windows 上で実行されている場合、SMB 経由で Bitbucket Server に接続するときに使うユーザー名

移行スクリプトの確認

スクリプトを生成したら、ファイルを確認し、必要に応じてスクリプトを編集します。

  • 移行したくないリポジトリがある場合は、対応する行を削除するかコメントにします。
  • 既定では、GitHub のリポジトリ名は projectKey-repositoryName 規則に従います。 たとえば、キー OS を持つ open-source プロジェクトの一部である airports という名前の Bitbucket Server リポジトリは、GitHub では OS-airports と呼ばれます。 GitHub でリポジトリに別の名前を使う場合は、対応する --github-repo フラグの値を更新します。

移行スクリプトの実行

リポジトリを移行するには、生成されたスクリプトを実行します。

You must follow this step from a computer that can access:

  • Your Bitbucket Server instance via HTTPS
  • Your Bitbucket Server instance via SFTP, if your Bitbucket Server instance runs on Linux. In general, if you can access the server via SSH, then you can also use SFTP.
  • Your Bitbucket Server instance via SMB, if your Bitbucket Server instance runs on Windows
  • Your chosen blob storage provider

スクリプトを実行する前に、BLOB ストレージ プロバイダーに対する認証を行うために追加の環境変数を設定する必要があります。

  • AWS S3 の場合は、次の環境変数を設定します。
    • AWS_ACCESS_KEY: バケットのアクセス キー
    • AWS_SECRET_KEY: バケットの秘密鍵
    • AWS_REGION: バケットが配置されている AWS リージョン
    • AWS_SESSION_TOKEN: AWS の一時的な資格情報を使用している場合のセッション トークン (AWS ドキュメントの「AWS リソースで一時的な資格情報を使用する」を参照してください)
  • Azure Blob Storage の場合は、AZURE_STORAGE_CONNECTION_STRING を Azure ストレージ アカウントの接続文字列に設定します。

ストレージ アカウントのアクセス キーを使う接続文字列のみがサポートされています。 Shared Access Signature (SAS) を使う接続文字列はサポートされていません。 ストレージ アカウントのアクセス キーについて詳しくは、Azure のドキュメントの「ストレージ アカウント アクセス キーを管理する」をご覧ください。

複数のリポジトリを移行するには、上で生成したスクリプトを実行します。 次のコマンドの FILENAME を、スクリプトの生成時に指定したファイル名に置き換えます。

  • ターミナルを使っている場合は、./ を使います。
    Shell
    ./FILENAME
  • PowerShell を使っている場合は、.\ を使います。
    Shell
    .\FILENAME