Синхронизация веток между репозиториями 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 для синхронизации веток между двумя репозиториями.