Gerrit как инструмент обзора, а не как хранилище записей

Я развернул экземпляр gerrit из краткого руководства по началу работы.

Моя компания использует BitBucket с запросами на тягу и иногда тиглем для обзоров кода. Мы используем Jenkins с обширным конвейером сборки/развертывания, привязанным к BitBucket.

Мы хотели бы интегрировать gerrit для проверки кода из-за его способности выполнять коммиты и строить/проверять их до того, как будет принят обзор.

В принципе, я хочу, чтобы кнопка gertrit "отправить" нажала вверх по потоку в BitBucket. (Я бы предпочел не пытаться сделать это путем репликации, я хочу поддерживать BitBucket как восходящий/репозитарий записи из-за корпоративной инерции.)

Есть ли у кого-нибудь предложения о том, как это сделать? Существует ли возможность, или это новая идея?

Ответ 1

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

Это означает, что при использовании Gerrit репозиторий Git должен размещаться внутри самого Gerrit. Вследствие этого вам необходимо будет сохранить полную копию репозитория BitBucket в вашем экземпляре Gerrit. Таким образом, этот вопрос в основном сводится к сохранению двух репозиториев Git в синхронизации.

Синхронизация новых коммитов с BitBucket на Gerrit

Поскольку вы уже используете Jenkins, я бы рекомендовал сборку Jenkins для обновления вашего репозитория Gerrit всякий раз, когда новые коммиты переносятся в репозиторий BitBucket. Для этого вам понадобятся:

  1. Пользователь Gerrit с возможностью прямого нажатия. Для этого вам нужно предоставить права Push в refs/heads/* ref в проекте Gerrit. Этот пользователь будет использоваться Дженкинсом. Будьте осторожны, чтобы не предоставлять эту привилегию конечным пользователям, или они смогут обойти обзор кода, нажав прямо.
  2. Задача Jenkins, сконфигурированная для сборки, когда новые коммиты помещаются в ваш репозиторий BitBucket. В рамках этой работы просто нажмите все ветки на свой экземпляр Gerrit.
  3. Настройте сервисный крючок 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 (оставьте комментарий, если вы хотите, чтобы я подробно остановился на этом).

Надеюсь это поможет!