Skip to main content

Перенос репозиториев из Azure DevOps в GitHub Enterprise Cloud

Репозитории можно перенести из Azure DevOps в GitHub Enterprise Cloud, используя GitHub CLI или API GraphQL.

Tool navigation

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

Чтобы просмотреть инструкции по использованию API, используйте переключатель инструментов в верхней части страницы.
Чтобы просмотреть инструкции по использованию GitHub CLI, используйте переключатель инструментов в верхней части страницы.

Note

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

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

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

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

Шаг 0. Подготовка к использованию API GraphQL GitHub

Чтобы сделать запросы GraphQL, вам потребуется написать собственные скрипты или использовать HTTP-клиент, такой как бессонница.

Дополнительные сведения о начале работы с API GraphQL GitHub GraphQL, включая аутентификацию, см. в разделе "Формирование вызовов с помощью GraphQL".

Все запросы GraphQL отправляются в место назначения миграции. Если вы переносите данные GitHub Enterprise Cloud с размещением данных, обязательно отправьте запросы в конечную точку поддомена вашего предприятия GHE.com.

Шаг 1. Получение ownerId назначения миграции

В качестве владелец организации в GitHub Enterprise Cloudиспользуйте GetOrgInfo запрос для возврата ownerIdидентификатора организации, которая также называется идентификатором организации, для которой требуется принадлежать перенесенные репозитории. Вам потребуется ownerId определить назначение миграции.

GetOrgInfo Запроса

query(
  $login: String!
){
  organization (login: $login)
  {
    login
    id
    name
    databaseId
  }
}
Переменная запросаDescription
loginИмя вашей организации.

GetOrgInfo Ответ

{
  "data": {
    "organization": {
      "login": "Octo",
      "id": "MDEyOk9yZ2FuaXphdGlvbjU2MTA=",
      "name": "Octo-org",
      "databaseId": 5610
    }
  }
}

В этом примере MDEyOk9yZ2FuaXphdGlvbjU2MTA= — это идентификатор организации или ownerIdидентификатор организации, который мы будем использовать на следующем шаге.

Шаг 2. Определение места миграции из

Вы можете настроить источник миграции с помощью createMigrationSource запроса. Вам потребуется указать ownerIdидентификатор организации, собранный GetOrgInfo из запроса.

Источник миграции — это ваша организация ADO.

createMigrationSource мутация

mutation createMigrationSource($name: String!, $ownerId: ID!) {
  createMigrationSource(input: {name: $name, url: "https://dev.azure.com", ownerId: $ownerId, type: AZURE_DEVOPS}) {
    migrationSource {
      id
      name
      url
      type
    }
  }
}

Примечание. Обязательно используйте AZURE_DEVOPS для type.

Переменная запросаDescription
nameИмя источника миграции. Это имя для собственной ссылки, поэтому можно использовать любую строку.
ownerIdИдентификатор организации в GitHub Enterprise Cloud.

createMigrationSource ответ

{
  "data": {
    "createMigrationSource": {
      "migrationSource": {
        "id": "MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA",
        "name": "Azure Devops Source",
        "url": "https://dev.azure.com",
        "type": "AZURE_DEVOPS"
      }
    }
  }
}

В этом примере MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA — это идентификатор источника миграции, который мы будем использовать на следующем шаге.

Шаг 3. Запуск миграции репозитория

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

Если вы хотите одновременно переместить несколько репозиториев из одной исходной организации, можно ставить в очередь несколько миграций. Одновременно можно выполнять до 5 миграций репозитория.

startRepositoryMigration мутация

mutation startRepositoryMigration (
  $sourceId: ID!,
  $ownerId: ID!,
  $sourceRepositoryUrl: URI!,
  $repositoryName: String!,
  $continueOnError: Boolean!,
  $accessToken: String!,
  $githubPat: String!,
  $targetRepoVisibility: String!
){
  startRepositoryMigration( input: {
    sourceId: $sourceId,
    ownerId: $ownerId,
    repositoryName: $repositoryName,
    continueOnError: $continueOnError,
    accessToken: $accessToken,
    githubPat: $githubPat,
    targetRepoVisibility: $targetRepoVisibility
    sourceRepositoryUrl: $sourceRepositoryUrl,
  }) {
    repositoryMigration {
      id
      migrationSource {
        id
        name
        type
      }
      sourceUrl
    }
  }
}
Переменная запросаDescription
sourceIdИсточник миграции id вернулся из мутации createMigrationSource .
ownerIdИдентификатор организации в GitHub Enterprise Cloud.
repositoryNameПользовательское уникальное имя репозитория, которое в настоящее время не используется ни одной из репозиториев, принадлежащих организации, на GitHub Enterprise Cloud. Проблема с ведением журнала ошибок будет создана в этом репозитории при завершении или остановке миграции.
continueOnErrorПараметр миграции, позволяющий продолжить миграцию при возникновении ошибок, которые не вызывают сбой миграции. Должно быть true или false. Настоятельно рекомендуется задать значение continueOnError true , чтобы миграция продолжалась, если только Importer не может переместить источник Git или Importer потерял соединение и не сможет повторно подключиться к миграции.
githubPatpersonal access token для целевой организации на GitHub Enterprise Cloud.
accessTokenpersonal access token для источника.
targetRepoVisibilityВидимость нового репозитория. Должно быть private, public или internal. Если этот параметр не задан, репозиторий переносится как закрытый.
sourceRepositoryUrlURL-адрес исходного репозитория с использованием формата https://dev.azure.com/{organization}/{project}/_git/{repository}.

Требования к personal access token см. в разделе "Управление доступом к миграции из Azure DevOps".

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

Шаг 4. Проверка состояния миграции

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

Запрос getMigration возвращается с состоянием, чтобы сообщить, является queuedли миграция , in progress``failedили completed. Если миграция завершилась сбоем, Importer предоставит причину сбоя.

getMigration Запроса

query (
  $id: ID!
){
  node( id: $id ) {
    ... on Migration {
      id
      sourceUrl
      migrationSource {
        name
      }
      state
      failureReason
    }
  }
}
Переменная запросаDescription
idМиграцияid, возвращаемая мутациейstartRepositoryMigration.

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

Чтобы завершить миграцию, рекомендуется проверка проблему журнала миграции. Эта проблема создается на GitHub в целевом репозитории.

Снимок экрана: проблема с заголовком "Журнал миграции". Второй комментарий в этой проблеме включает журналы для миграции.

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

Шаг 1. Установка ADO2GH extension of the GitHub CLI

Если это первая миграция, необходимо установить ADO2GH extension of the GitHub CLI. Дополнительные сведения о GitHub CLIсм. в разделе "Сведения о GitHub CLI".

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

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

    Примечание. Вам нужна версия 2.4.0 или более позднюю версию GitHub CLI. Вы можете проверка версию, установленную gh --version с помощью команды.

  2. Установите ADO2GH extension.

    Shell
    gh extension install github/gh-ado2gh
    

В любой момент, когда вам нужна помощь с данными ADO2GH extension, можно использовать --help флаг с помощью команды. Например, gh ado2gh --help перечислит все доступные команды и gh ado2gh migrate-repo --help отобразит список всех параметров, доступных для migrate-repo команды.

Шаг 2. Обновление ADO2GH extension of the GitHub CLI

Данные ADO2GH extension of the GitHub CLI обновляются еженедельно. Чтобы убедиться, что вы используете последнюю версию, обновите расширение.

Shell
gh extension upgrade github/gh-ado2gh

Шаг 3. Задание переменных среды

Прежде чем использовать ADO2GH extension для миграции на GitHub Enterprise Cloud, необходимо создать personal access tokens, которые могут получить доступ к исходным и целевым организациям, а затем задать personal access tokens в качестве переменных среды.

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

  2. Создайте и запишите personal access token, которые будут проходить проверку подлинности для исходной организации в Azure DevOps, убедившись, что этот маркер соответствует всем требованиям. Дополнительные сведения см. в разделе Управление доступом к миграции из Azure DevOps.

  3. Задайте переменные среды для personal access tokens, заменив TOKEN в командах ниже personal access token, записанных выше. Используется GH_PAT для целевой организации и ADO_PAT для исходной организации.

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

      Shell
      export GH_PAT="TOKEN"
      export ADO_PAT="TOKEN"
      
    • Если вы используете PowerShell, используйте $env команду.

      Shell
      $env:GH_PAT="TOKEN"
      $env:ADO_PAT="TOKEN"
      
  4. Если вы переносите данные GitHub Enterprise Cloud с размещением данных, задайте переменную среды для базового URL-адреса API для вашего предприятия. Например:

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

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

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

Если вы хотите перенести несколько репозиториев в 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)чтобы запустить его.

Если вы хотите перенести один репозиторий, перейдите к следующему шагу.

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

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

Shell
gh ado2gh generate-script --ado-org SOURCE --github-org DESTINATION --output FILENAME

Заполнители

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

ЗаполнительЗначение
ИСТОЧНИКИмя исходной организации
НАЗНАЧЕНИЕИмя целевой организации
FILENAMEИмя файла для результирующего скрипта миграции

Если вы используете терминал, используйте .ps1 расширение файла в качестве созданного скрипта, чтобы запустить PowerShell. Вы можете установить PowerShell для Mac или Linux.

Дополнительные аргументы

АргументDescription
--target-api-url TARGET-API-URLЕсли вы переносите данные GHE.com, добавьте --target-api-url TARGET-API-URL, где TARGET-API-URL является базовым URL-адресом API для поддомена предприятия. Например: https://api.octocorp.ghe.com.
--allДобавьте в скрипт дополнительные функциональные возможности, такие как перебор конвейеров, создание команд и настройка интеграции с Azure Boards.
--download-migration-logsСкачайте журнал миграции для каждого перенесенного репозитория. Дополнительные сведения о журналах миграции см. в разделе "Доступ к журналам миграции для GitHub Enterprise Importer".

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

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

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

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

Шаг 5. Миграция репозиториев

Можно перенести несколько репозиториев с помощью скрипта миграции или одного репозитория с gh ado2gh migrate-repo помощью команды.

Перенос нескольких репозиториев

Перенос одного репозитория

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

Shell
gh ado2gh migrate-repo --ado-org SOURCE --ado-team-project TEAM-PROJECT --ado-repo CURRENT-NAME --github-org DESTINATION --github-repo NEW-NAME

Note

Если вы переносите данные GHE.com, добавьте --target-api-url TARGET-API-URL, где TARGET-API-URL является базовым URL-адресом API для поддомена предприятия. Например: https://api.octocorp.ghe.com.

TEAM-PROJECT | Имя командного проекта репозитория, который требуется перенести

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

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

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

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

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