Skip to main content

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

Репозитории можно перенести с Bitbucket Server на GitHub Enterprise Cloud с помощью GitHub CLI.

Сведения о миграции репозитория с помощью GitHub Enterprise Importer

Можно перенести отдельные репозитории или все репозитории из экземпляра Сервера BitBucket с помощью GitHub CLI.

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

Note

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

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

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

  • Настоятельно рекомендуется выполнить пробную версию миграции и завершить рабочую миграцию в ближайшее время. Дополнительные сведения о пробных запусках см. в разделе Обзор миграции с 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.

    Note

    Вам нужна версия 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 с правами администратора или суперадминистратором и паролем для учетной записи 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 для вашего предприятия. Например:

    Shell
    export TARGET_API_URL="https://api.octocorp.ghe.com"
    

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

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

Так как многие экземпляры сервера Bitbucket сидят за брандмауэрами, GitHub CLI использует хранилище BLOB-объектов в качестве промежуточного расположения для хранения данных, доступных из Интернета.

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

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

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

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

Настройка контейнера хранилища 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/*"
            ]
        }
    ]
}

Note

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 создайте учетную запись хранения и запишите строка подключения. Дополнительные сведения см. в разделе "Управление ключами доступа к учетной записи хранения" в Документация Майкрософт.

Note

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 команду.

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're 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

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

ЗаполнительЗначение
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".
S МБ-USERЕсли экземпляр Bitbucket Server выполняется в Windows, имя пользователя, используемое при подключении к серверу Bitbucket через S МБ
AWS-BUCKET-NAMEИмя контейнера для контейнера AWS S3
ARCHIVE-DOWNLOAD-HOSTУзел, используемый для подключения к экземпляру Bitbucket Server или Data Center через SSH или S МБ. Это необходимо указать, только если вы используете кластер Bitbucket Data Center или сервер Bitbucket находится за подсистемой балансировки нагрузки.

Note

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

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

По умолчанию BBS2GH extension of the GitHub CLI выполняет всю миграцию, включая скачивание архива миграции из экземпляра сервера Bitbucket с помощью 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 и C:\Atlassian\ApplicationData\Bitbucket\Shared Windows это может отличаться /var/atlassian/application-data/bitbucket/shared в зависимости от конфигурации сервера. Сведения о том, как определить общий домашний каталог, см. в разделе Устранение неполадок миграции с помощью GitHub Enterprise Importer.

Скачайте архив миграции из экземпляра Сервера Bitbucket и сохраните архив на компьютере, где выполняется 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're 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 bb2gh abort-migration --migration-id MIGRATION-ID

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

По завершении миграции рекомендуется просмотреть журнал миграции. Дополнительные сведения см. в разделе «Доступ к журналам миграции для GitHub Enterprise Importer».

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

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

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

Note

Создание скрипта выводит скрипт 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

Если вы хотите, чтобы скрипт скачал журнал миграции для каждого перенесенного репозитория, добавьте --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".
S МБ-USERЕсли экземпляр Bitbucket Server выполняется в Windows, имя пользователя, используемое при подключении к серверу Bitbucket через S МБ
ARCHIVE-DOWNLOAD-HOSTУзел, используемый для подключения к экземпляру Bitbucket Server или Data Center через SSH или S МБ. Это необходимо указать, только если вы используете кластер Bitbucket Data Center или сервер Bitbucket находится за подсистемой балансировки нагрузки.

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

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

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

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

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

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

Перед выполнением скрипта необходимо задать дополнительные переменные среды для проверки подлинности в поставщике хранилища 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.

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