Skip to main content

Перенос репозиториев из Bitbucket Server в GitHub Enterprise Cloud

Вы можете мигрировать репозитории с Bitbucket Server на GitHub Enterprise Cloud .GitHub CLI

О миграциях репозиториев с GitHub Enterprise Importer

Вы можете мигрировать отдельные репозитории или все репозитории с экземпляра BitBucket Server, используя GitHub CLI.

В настоящее время миграция с Bitbucket Server с API GitHub не поддерживается.

Если в целевой организации или предприятии включены наборы правил, история мигрированного репозитория может нарушать эти правила. Чтобы позволить миграцию без отключения ваших правил, добавьте «Миграции репозитория» в список обхода для каждого применимого набора правил. Этот обход действует только во время миграции. После завершения правила будут применяться ко всем новым взносам.

Для настройки обхода:

  1. Перейдите к каждому набору правил для каждого предприятия или организации.
  2. В разделе «Список обхода» нажмите « Добавить обход».
  3. Выберите миграции репозиторий.

Дополнительные сведения см. в разделе [AUTOTITLE и Создание наборов правил для репозиториев в организации](/enterprise-cloud@latest/migrations/troubleshooting/setting-ruleset-bypasses-for-repository-migrations).

Необходимые компоненты

  • Настоятельно рекомендуется выполнить пробную версию миграции и завершить рабочую миграцию в ближайшее время. Дополнительные сведения о пробных запусках см. в разделе Обзор миграции с Bitbucket Server на GitHub Enterprise Cloud.
  • Убедитесь, что вы понимаете данные, которые будут перенесены, и известные ограничения поддержки импорта. Для получения дополнительной информации см. Сведения о миграции с Bitbucket Server на GitHub Enterprise Cloud.
  • Хотя и не требуется, рекомендуется остановить работу во время рабочей миграции. Importer не поддерживает разностную миграцию, поэтому любые изменения, которые происходят во время миграции, не будут переноситься. Если вы решили не останавливать работу во время рабочей миграции, необходимо вручную перенести эти изменения.
  • Для целевого GitHub.comнаправления вы должны быть владельцем компании или выполнять роль мигратора. Дополнительные сведения см. в разделе Управление доступом к миграции с сервера Bitbucket.
  • Вам потребуется имя пользователя и пароль для учетной записи Сервера Bitbucket с разрешениями администратора или суперадминистратором.

Шаг 1: Установите BBS2GH extension of the GitHub CLI

Если это ваша первая миграция, вам нужно установить BBS2GH extension of the GitHub CLI. Дополнительные сведения см. в GitHub CLIразделе О GitHub CLI.

Кроме того, можно скачать автономный двоичный файл на странице выпусков для github/gh-bbs2gh репозитория. Этот двоичный gh файл можно запускать напрямую без префикса.

  1. Установите GitHub CLI. Инструкции по установке для GitHub CLI см. в репозитории GitHub CLI.

    Примечание.

    Вам нужна версия 2.4.0 или более позднюю версию GitHub CLI. Вы можете проверить версию, установленную 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, нужно создать , personal access token который может получить доступ к целевой организации, а затем установить personal access token переменную как окружающую переменную.

Кроме того, необходимо задать переменные среды для имени пользователя и пароля сервера Bitbucket, а если экземпляр Сервера Bitbucket работает в Windows, пароль SMB.

  1. Создайте и запишите personal access token (classic) токен, который будет аутентифицироваться для целевой организации, GitHub Enterprise Cloudчтобы убедиться, что токен соответствует всем требованиям. Дополнительные сведения см. в разделе Управление доступом к миграции с сервера Bitbucket.

  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"
      
  3. Если вы переходите на GitHub Enterprise Cloud с размещением данных, для удобства, установите переменную среды для базового URL API для вашего предприятия.

    Убедитесь, что вы заменили SUBDOMAIN его на поддомен вашего предприятия. Например, если поддоменом вашего предприятия является acme, значением TARGET_API_URL будет .https://api.acme.ghe.com

    • Если вы используете терминал, используйте export команду.

      Shell
      export TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
      
    • Если вы используете PowerShell, используйте $env команду.

      Shell
      $env:TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
      

    Вы используете эту переменную с --target-api-url опцией в командах, которые выполняете с GitHub CLI.

Шаг 4. Настройка хранилища BLOB-объектов

Поскольку многие экземпляры Bitbucket Server находятся за межсетевыми экранами, они GitHub CLI используют blob-хранилище как промежуточное место для хранения данных, доступных из интернета.

Сначала вы создайте архив данных, которые вы хотите перенести и отправить данные в хранилище BLOB-объектов за брандмауэром.

GitHub CLI поддерживает следующие поставщики хранилища BLOB-объектов:

  • Amazon Web Services (AWS) S3
  • хранилище BLOB-объектов Azure

Прежде чем запустить миграцию, необходимо настроить контейнер хранилища с выбранным поставщиком облачных служб для хранения данных.

С использованием GitHub-owned blob storage

Если вы не хотите настраивать и предоставлять GitHub Enterprise Importer доступ к аккаунту хранения blob за межсетевым экраном, вы можете мигрировать репозитории с GitHub-owned blob storage помощью флага --use-github-storage . Для этого вы должны запускать версию 1.9.0 (или выше) от BBS2GH extension of the GitHub CLI.

Для соображений безопасности GitHub-owned blob storage это явно только для записи, и загрузка невозможна GitHub-owned blob storage . После завершения миграции архивы репозитория немедленно удаляются. Если архив отправляется и не используется в миграции, архив удаляется через 7 дней.

Настройка контейнера хранилища AWS S3

В AWS настройте контейнер S3. Дополнительные сведения см. в разделе "Создание контейнера " в документации ПО AWS.

Вам также потребуется ключ доступа AWS и секретный ключ со следующими разрешениями:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::github-migration-bucket",
                "arn:aws:s3:::github-migration-bucket/*"
            ]
        }
    ]
}

Примечание.

GitHub Enterprise Importer не удаляет архив из AWS после завершения миграции. Чтобы сократить затраты на хранение, рекомендуется настроить автоматическое удаление архива через период времени. Дополнительные сведения см. в разделе Настройка конфигурации жизненного цикла в контейнере в документации AWS.

Когда вы будете готовы к миграции, вам потребуется предоставить учетные данные AWS в GitHub CLI: регион, ключ доступа, секретный ключ и маркер сеанса (при необходимости). Их можно передать в качестве аргументов или задать переменные среды, называемые AWS_REGION, и AWS_SESSION_TOKEN``AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY.

Кроме того, необходимо передать имя контейнера S3 с помощью аргумента --aws-bucket-name .

Настройка учетной записи хранения Хранилище BLOB-объектов Azure

В Azure создайте учетную запись хранения и запишите строка подключения. Дополнительные сведения см. в разделе "Управление ключами доступа к учетной записи хранения" в Документация Майкрософт.

Примечание.

GitHub Enterprise Importer не удаляет архив из Хранилище BLOB-объектов Azure после завершения миграции. Чтобы сократить затраты на хранение, рекомендуется настроить автоматическое удаление архива через период времени. Дополнительные сведения см. в статье "Оптимизация затрат путем автоматического управления жизненным циклом данных в Документация Майкрософт".

Когда вы будете готовы выполнить миграцию, вы можете передать строка подключения в GitHub CLI в качестве аргумента или передать его с помощью переменной AZURE_STORAGE_CONNECTION_STRINGсреды.

Разрешение сетевого доступа

Если вы настроили правила брандмауэра в учетной записи хранения, убедитесь, что у вас есть доступ к диапазонам IP-адресов для назначения миграции. См . раздел AUTOTITLE.

Шаг 5. Перенос репозитория

Репозитории можно перенести с gh bbs2gh migrate-repo помощью команды.

При миграции репозитория по умолчанию BBS2GH extension of the GitHub CLI выполняется следующие шаги:

  1. Подключается к экземпляру Сервера Bitbucket и создает архив миграции для каждого репозитория.
  2. Скачивает архив миграции с экземпляра Bitbucket Server на машину, где вы запускаете BBS2GH extension of the GitHub CLI, используя SFTP (Linux) или SMB (Windows)
  3. Отправляет архивы миграции в выбранный поставщик хранилища BLOB-объектов.
  4. Начинает вашу миграцию в GitHub Enterprise Cloud, используя URL архивов, хранящихся у вашего провайдера хранения blob
  5. Удаляет архив миграции с локального компьютера. (После завершения миграции необходимо удалить архив из поставщика хранилища BLOB-объектов вручную.)

В качестве альтернативы можно использовать GitHub CLI файл для генерации архива, скачать его вручную, а затем GitHub CLI продолжить миграцию.

Возможность GitHub CLI скачать архив миграции

Чтобы перенести один репозиторий, используйте gh bbs2gh migrate-repo команду.

Этот шаг необходимо выполнить на компьютере, к которому можно получить доступ:

  • Экземпляр сервера Bitbucket через HTTPS
  • Экземпляр сервера Bitbucket через SFTP, если экземпляр сервера Bitbucket работает в Linux. Как правило, если вы можете получить доступ к серверу через SSH, можно также использовать SFTP.
  • Экземпляр сервера Bitbucket через SMB, если экземпляр Bitbucket Server работает в Windows
  • Выбранный поставщик хранилища BLOB-объектов
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 \
  # If you are migrating to GHE.com:
  --target-api-url TARGET-API-URL
  # If your Bitbucket Server instance runs on Linux:
  --ssh-user SSH-USER --ssh-private-key PATH-TO-KEY
  # If your Bitbucket Server instance runs on Windows:
  --smb-user SMB-USER
  # If you are using AWS S3 as your blob storage provider:
  --aws-bucket-name AWS-BUCKET-NAME
  # If you are running a Bitbucket Data Center cluster or your Bitbucket Server is behind a load balancer:
  --archive-download-host ARCHIVE-DOWNLOAD-HOST
  # If you are using GitHub owned blob storage:
  --use-github-storage

Замените заполнители в приведенной выше команде следующими значениями.

ЗаполнительЗначение
BBS-SERVER-URLURL-адрес экземпляра сервера Bitbucket
PROJECTКлюч для проекта Bitbucket Server репозитория, который требуется перенести
CURRENT-NAMEИмя репозитория, который требуется перенести
НАЗНАЧЕНИЕИмя целевой организации
NEW-NAMEИмя, которое должен иметь перенесенный репозиторий.
TARGET-API-URLБазовый URL-адрес API для поддомена вашего предприятия GHE.com. Например: https://api.octocorp.ghe.com.
SSH-USERЕсли экземпляр сервера Bitbucket работает в Linux, имя пользователя, которое будет использоваться при подключении к серверу Bitbucket через SFTP
PATH-TO-KEYЕсли экземпляр Bitbucket Server выполняется в Linux, путь к закрытому ключу SSH, например ~/.ssh/id_rsa. Требования к ключу SSH см. в разделе Управление доступом к миграции с сервера Bitbucket.
SMB-USERЕсли экземпляр Bitbucket Server работает в Windows, имя пользователя, используемое при подключении к серверу Bitbucket через SMB
AWS-BUCKET-NAMEИмя контейнера для контейнера AWS S3
ARCHIVE-DOWNLOAD-HOSTУзел, используемый для подключения к экземпляру Bitbucket Server или Data Center через SSH или SMB. Это необходимо указать, только если вы используете кластер Bitbucket Data Center или сервер Bitbucket находится за подсистемой балансировки нагрузки.

Примечание.

Если вы получаете сообщение Renci.SshNetоб ошибке, интерфейс командной строки имеет проблемы с подключением SFTP к серверу для скачивания архива миграции. Сведения об устранении этих проблем см. в разделе Устранение неполадок при миграции с помощью GitHub Enterprise Importer.

Скачивание архива миграции вручную

По умолчанию BBS2GH extension of the GitHub CLI он выполняет всю миграцию, включая загрузку архива миграции с экземпляра Bitbucket Server с помощью SFTP или SMB.

Однако некоторые клиенты предпочитают скачать архив миграции вручную, так как сервер не предлагает доступ К SFTP, например. В таком случае вы можете использовать GitHub CLI его для генерации архива, скачать его вручную, а затем GitHub CLI продолжить миграцию.

Этот шаг необходимо выполнить на компьютере, к которому можно получить доступ:

  • Экземпляр сервера Bitbucket через HTTPS
  • Выбранный поставщик хранилища 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-URLURL-адрес экземпляра сервера Bitbucket
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 \
  --bbs-server-url BBS-SERVER-URL \
  --bbs-project PROJECT \
  --bbs-repo CURRENT-NAME \
  # If you are using AWS S3 as your blob storage provider:
  --aws-bucket-name AWS-BUCKET-NAME
  # If you are migrating to GHE.com:
  --target-api-url TARGET-API-URL

Замените заполнители в приведенной выше команде следующими значениями.

ЗаполнительЗначение
ARCHIVE-PATHПуть к архиву миграции сервера Bitbucket, скачанного из вашего экземпляра
НАЗНАЧЕНИЕИмя целевой организации
NEW-NAMEИмя, которое должен иметь перенесенный репозиторий.
BBS-SERVER-URLURL-адрес экземпляра сервера Bitbucket
PROJECTКлюч для проекта Bitbucket Server репозитория, который требуется перенести
CURRENT-NAMEИмя репозитория, который требуется перенести
AWS-BUCKET-NAMEИмя контейнера для контейнера AWS S3
TARGET-API-URLБазовый URL-адрес API для поддомена вашего предприятия GHE.com. Например: https://api.octocorp.ghe.com.

Отмена миграции

Если вы хотите отменить миграцию, используйте abort-migration команду, заменив идентификатор MIGRATION-ID возвращенным идентификатором migrate-repo.

Shell
gh bbs2gh abort-migration --migration-id MIGRATION-ID

Шаг 6. Проверка миграции и проверка журнала ошибок

По завершении миграции рекомендуется просмотреть журнал миграции. Дополнительные сведения см. в разделе Доступ к журналам миграции для GitHub Enterprise Importer. Если в вашем исходном репозитории были правила, и они блокируют вас, смотрите Настройка обхода набора правил для миграций репозиториев.

Рекомендуется просмотреть перенесенные репозитории для проверки звука.

Шаг 7. Перенос нескольких репозиториев

Если вы хотите перенести несколько репозиториев в GitHub Enterprise Cloud одновременно, используйте GitHub CLI для создания скрипта миграции. Результирующий скрипт будет содержать список команд миграции, по одному на репозиторий.

Примечание.

Создание скрипта выводит скрипт PowerShell. Если вы используете терминал, вам потребуется вывести сценарий с .ps1 расширением файла и установить PowerShell для Mac[ или Linux, ](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.2)чтобы запустить его.

Создание скрипта миграции

Этот шаг необходимо выполнить с компьютера, который может получить доступ к экземпляру сервера Bitbucket через HTTPS.

Чтобы создать скрипт миграции, выполните gh bbs2gh generate-script команду.

Shell
gh bbs2gh generate-script --bbs-server-url BBS-SERVER-URL \
  --github-org DESTINATION \
  --output FILENAME \
  # If you are migrating to GHE.com:
  --target-api-url TARGET-API-URL
  # If your Bitbucket Server instance runs on Linux:
  --ssh-user SSH-USER --ssh-private-key PATH-TO-KEY
  # If your Bitbucket Server instance runs on Windows:
  --smb-user SMB-USER
  # If you are running a Bitbucket Data Center cluster or your Bitbucket Server is behind a load balancer:
  --archive-download-host ARCHIVE-DOWNLOAD-HOST
  # If you are using GitHub owned blob storage:
  --use-github-storage

Если вы хотите, чтобы скрипт скачал журнал миграции для каждого перенесенного репозитория, добавьте --download-migration-logs флаг. Дополнительные сведения о журналах миграции см. в разделе Доступ к журналам миграции для GitHub Enterprise Importer.

Замените заполнители в приведенной выше команде следующими значениями.

ЗаполнительЗначение
BBS-SERVER-URLURL-адрес экземпляра сервера Bitbucket
НАЗНАЧЕНИЕИмя целевой организации
FILENAMEИмя файла для результирующего скрипта миграции

Если вы используете терминал, используйте .ps1 расширение файла в качестве созданного скрипта, чтобы запустить PowerShell. Вы можете установить PowerShell для Mac или Linux.
TARGET-API-URLБазовый URL-адрес API для поддомена вашего предприятия GHE.com. Например: https://api.octocorp.ghe.com.
SSH-USERЕсли экземпляр сервера Bitbucket работает в Linux, имя пользователя, которое будет использоваться при подключении к серверу Bitbucket через SFTP
PATH-TO-KEYЕсли экземпляр Bitbucket Server выполняется в Linux, путь к закрытому ключу SSH, например ~/.ssh/id_rsa. Требования к ключу SSH см. в разделе Управление доступом к миграции с сервера Bitbucket.
SMB-USERЕсли экземпляр Bitbucket Server работает в Windows, имя пользователя, используемое при подключении к серверу Bitbucket через SMB
ARCHIVE-DOWNLOAD-HOSTУзел, используемый для подключения к экземпляру Bitbucket Server или Data Center через SSH или SMB. Это необходимо указать, только если вы используете кластер Bitbucket Data Center или сервер Bitbucket находится за подсистемой балансировки нагрузки.

Просмотр скрипта миграции

После создания скрипта просмотрите файл и, при необходимости, измените скрипт.

  • Если есть какие-либо репозитории, которые вы не хотите перенести, удалить или закомментировать соответствующие строки.
  • По умолчанию имена репозиториев в GitHub будут следовать определённой projectKey-repositoryName конвенции. Например, репозиторий Bitbucket Server, названный airports , входящим в open-source проект, и имеющий ключ OS, будет вызван OS-airports в GitHub. Если вы хотите, чтобы какие-либо репозитории имели другое GitHubимя, обновите значение соответствующего --github-repo флага.

Если вы скачали BBS2GH как автономный двоичный файл, а не как расширение для GitHub CLI, вам потребуется обновить созданный скрипт, чтобы запустить двоичный файл вместо gh bbs2ghнего.

Запуск скрипта миграции

Чтобы перенести репозитории, запустите созданный скрипт.

Этот шаг необходимо выполнить на компьютере, к которому можно получить доступ:

  • Экземпляр сервера Bitbucket через HTTPS
  • Экземпляр сервера Bitbucket через SFTP, если экземпляр сервера Bitbucket работает в Linux. Как правило, если вы можете получить доступ к серверу через SSH, можно также использовать SFTP.
  • Экземпляр сервера Bitbucket через SMB, если экземпляр Bitbucket Server работает в Windows
  • Выбранный поставщик хранилища BLOB-объектов

Перед выполнением скрипта необходимо задать дополнительные переменные среды для проверки подлинности в поставщике хранилища BLOB-объектов.

  • Для AWS S3 задайте следующие переменные среды.
    • AWS_ACCESS_KEY_ID: идентификатор ключа доступа для контейнера
    • AWS_SECRET_ACCESS_KEY: секретный ключ для контейнера
    • AWS_REGION: регион AWS, в котором находится контейнер
    • AWS_SESSION_TOKEN: маркер сеанса, если вы используете временные учетные данные AWS (см. сведения об использовании временных учетных данных с ресурсами AWS в документации AWS).
  • Для Хранилище BLOB-объектов Azure задайте AZURE_STORAGE_CONNECTION_STRING строка подключения для учетной записи хранения Azure.

Поддерживаются только строка подключения с помощью ключей доступа к учетной записи хранения. Строки подключения, использующие подписанные URL-адреса (SAS), не поддерживаются. Дополнительные сведения о ключах доступа к учетной записи хранения см. в статье "Управление ключами доступа к учетной записи хранения" в документации Azure.

Чтобы мигрировать несколько репозиториев, запустите сгенерированный вами скрипт. Замените FILENAME в приведенных ниже командах именем файла, указанным при создании скрипта.

  • Если вы используете терминал, используйте ./.

    Shell
    ./FILENAME
    
  • Если вы используете PowerShell, используйте .\.

    Shell
    .\FILENAME