Ответ 1
Gerrit реализует функции проверки кода, предоставляя (более или менее) тонкую оболочку вокруг реального репозитория Git, который размещается внутри самого Gerrit. Насколько я знаю, нет возможности интегрировать внешний репозиторий Git непосредственно в Gerrit.
Это означает, что при использовании Gerrit репозиторий Git должен размещаться внутри самого Gerrit. Вследствие этого вам необходимо будет сохранить полную копию репозитория BitBucket в вашем экземпляре Gerrit. Таким образом, этот вопрос в основном сводится к сохранению двух репозиториев Git в синхронизации.
Синхронизация новых коммитов с BitBucket на Gerrit
Поскольку вы уже используете Jenkins, я бы рекомендовал сборку Jenkins для обновления вашего репозитория Gerrit всякий раз, когда новые коммиты переносятся в репозиторий BitBucket. Для этого вам понадобятся:
- Пользователь Gerrit с возможностью прямого нажатия. Для этого вам нужно предоставить права Push в
refs/heads/*
ref в проекте Gerrit. Этот пользователь будет использоваться Дженкинсом. Будьте осторожны, чтобы не предоставлять эту привилегию конечным пользователям, или они смогут обойти обзор кода, нажав прямо. - Задача Jenkins, сконфигурированная для сборки, когда новые коммиты помещаются в ваш репозиторий BitBucket. В рамках этой работы просто нажмите все ветки на свой экземпляр Gerrit.
- Настройте сервисный крючок BitBucket для запуска вашей сборки Jenkins (для этого ваш экземпляр Jenkins должен быть общедоступным, иначе просто установите расписание вашего задания Jenkins на короткий интервал, чтобы свести к минимуму задержку синхронизации).
Синхронизация новых коммитов от Gerrit к BitBucket
При отправке обзоров кода в Gerrit новые коммиты должны быть возвращены в BitBucket. Обычно я рекомендую использовать для этого плагин репликации. Здесь, как может выглядеть соответствующий файл конфигурации (идет в etc/replication.config
в вашем каталоге Gerrit):
[remote "bitbucket"]
url = ssh://[email protected]/<your-user>/${name}.git
push = +refs/tags/*:refs/tags/*
push = +refs/heads/*:refs/heads/*
mirror = true
replicateOnStartup = true
replicatePermissions = false
Поскольку вы упомянули, что хотите избежать использования репликации, вы также можете использовать задание Jenkins для синхронизации данных от Gerrit до BitBucket. Чтобы свести к минимуму задержку, вы можете использовать плагин Gerrit Trigger для Jenkins (который вы хотите использовать в любом случае для проверок pre-commit). Кроме того, вы можете использовать собственный крюк Gerrit, который вы помещаете в hooks/ref-updated
чтобы запустить сборку Jenkins (оставьте комментарий, если вы хотите, чтобы я подробно остановился на этом).
Надеюсь это поможет!