Синхронизация веток между репозиториями BitBucket и GitHub

В большинстве случаев у нас будет потребность синхронизировать ветки между двумя разными репозиториями (например, репозиторий BitBucket с репозиторием GitHub).

Это распространенный сценарий при работе с облачным репозиторием, но повседневная разработка управляется через локальные репозитории. В этом случае ветки локального репозитория должны быть синхронизированы с облачным репозиторием для развертывания. Обработка синхронизации вручную создает множество проблем, а также отнимает больше времени у команды разработчиков. Лучший вариант - автоматизировать синхронизацию веток между локальным и облачным репозиториями. Можно включить полное зеркальное отображение репозитория, но это синхронизирует каждую ветку. Моя цель - синхронизировать только определенные ветки.

В этом руководстве мы увидим подход к синхронизации ветвей между репозиторием BitBucket и GitHub через конвейер BitBucket CI / CD. Тот же подход можно использовать с минимальными изменениями для синхронизации веток любых двух репозиториев.

Предпосылки

  • Репозиторий Bit Bucket
  • Пустой репозиторий GitHub

Настроить Bitbucket Pipeline

Я создал ветку с именем dev в репозитории BitBucket. Ветка dev должна синхронизироваться с репозиторием GitHub при любых изменениях. Ветвь dev будет создана в репозитории GitHub во время первой синхронизации.

Конвейер будет выполняться при каждом изменении, помещенном в указанные ветки (например, dev, и синхронизировать изменения с удаленным репозиторием GitHub).

Войдите в репозиторий BitBucket, щелкните «Конвейеры» и «Создайте свой первый конвейер»:

Выберите «Стартовый конвейер»:

Включите приведенные ниже конфигурации в bitbucket-pipelines.yml и подтвердите изменения. Файл будет зафиксирован в корне основной ветки. Скопируйте файл в другие необходимые ветки (например, dev):

Измените ссылки на имена веток (dev, dev1 и uat) в соответствии с вашими конфигурациями. Кроме того, соответствующим образом измените URL-адрес удаленного (GitHub) репозитория.

При фиксации изменений в ветвях dev, dev1 и uat запускается конвейер, и для синхронизации локальных ветвей (BitBucket) с удаленным репозиторием (GitHub) выполняются сценарии, относящиеся к конкретной среде:

git remote add sync [email protected]:techforum-repo/test1.git - add GitHub repository as the additional remote repository and tag with name "sync"
git checkout dev - Check out the latest changes from local dev bracnh( modify branch name accordingly), this step can be skipped as BitBucket pipeline already checked out the laetst branch
git pull - pull the latest change from local branch,  this step can be skipped as BitBucket pipeline already pulled out the laetst branch   
git push sync dev - push the local(BitBucket) branch to the remote GitHub repository (modify branch name accordingly)

Сгенерировать ключи SSH

URL-адрес HTTPS Git удаленного репозитория (https: // techforum-repo: [email protected]/techforum-repo/test1.git) можно использовать вместе с учетными данными в конвейере для передачи локальных изменений на удаленный репозиторий (храните учетные данные в репозитории или переменных развертывания и обращайтесь к ним в конвейере), но лучше всего использовать URL-адрес SSH ([email protected]: techforum-repo / test1.git).

Ключи SSH должны быть настроены для включения интеграции на основе SSH. В качестве первого шага сгенерируйте ключи SSH, выполнив команду ниже (вы можете выполнить через GIT bash). При необходимости ключи SSH могут быть сгенерированы через пользовательский интерфейс BitBucket:

ssh-keygen -t ed25519 -C "[email protected]"

Это сгенерирует публичный (id_ed25519.pub) и частный (id_ed25519) ключи в папке .ssh.

Настройка ключей SSH - GitHub

Теперь войдите в репозиторий GitHub и создайте новый ключ развертывания:

Добавьте заголовок к ключу (sync-bitbucket). Введите открытый ключ из файла id_ed25519.pub.

Выберите «Разрешить доступ для записи». Нажмите «Добавить ключ»:

Настройка ключей SSH - BitBucket

Войдите в репозиторий BitBucket и нажмите «Настройки репозитория»:

Нажмите «Ключи SSH» и «Использовать мои собственные ключи» (как обсуждалось ранее, вы можете использовать кнопку «Сгенерировать ключи» для генерации закрытых и открытых ключей).

Добавьте закрытый ключ из файла id_ed25519, открытый ключ из файла id_ed25519.pub и сохраните пару ключей.

Теперь внесите некоторые изменения в одну из веток (например, dev) в BitBucket. Это вызовет соответствующие шаги конвейера:

После успешного завершения конвейера определенные ветви (например, dev) из репозитория BitBucket синхронизируются с репозиторием GitHub (соответствующие ветви будут созданы в GitHub для первой синхронизации):

Конвейер CI / CD может помочь нам синхронизировать ветки между двумя разными репозиториями. Здесь мы синхронизируем определенные ветки из репозитория BitBucket с репозиторием GitHub, но тот же подход можно использовать для синхронизации двух разных репозиториев. При необходимости можно использовать внешние инструменты CI / CD (например, Jenkins) для синхронизации двух разных репозиториев.

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