Зеркало репозитория с OneDev


Введение

Часто бывает желательно зеркалировать репозитории между OneDev и другими хостингами. Например, вы можете захотеть перенести изменения в копию на GitHub для публичного доступа, или получить обратно все изменения, внесенные другими пользователями на GitHub.

OneDev 7.1 сделал эту задачу тривиальной благодаря новым шагам синхронизации репозитория. Давайте посмотрим, как этого добиться.

Подготовка

Прежде всего, запустите OneDev, выполнив следующую команду:

$ docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/onedev:/opt/onedev -p 6610:6610 -p 6611:6611 1dev/server
Войти в полноэкранный режим Выйти из полноэкранного режима

Направьте браузер на localhost:6610, чтобы настроить OneDev, и создайте тестовый проект.

Затем создайте пустой репозиторий на GitHub, который будет использоваться как зеркало нашего тестового репозитория, предположим, что url будет таким: https://github.com/youraccount/test.

Отправка изменений в зеркало

Теперь мы настроим OneDev на отправку изменений в зеркало GitHub при изменении ветки или тега:

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

  2. На стороне OneDev создайте job secret в тестовом проекте и используйте в качестве его значения токен доступа, указанный выше:

  3. Определите спецификацию сборки, чтобы добавить задание с именем Push to GitHub, и добавьте шаг типа Repository Sync / Push to Remote. Для поля пароля / маркера доступа выберите маркер задания, определенный выше:

  4. Добавьте триггеры для автоматического запуска задания при обновлении ветки или создании метки:

Теперь сохраните спецификацию сборки, и задание будет выполняться автоматически для отправки изменений на зеркало GitHub. Проверьте зеркало GitHub, и вы увидите, что оно содержит только что созданный файл .onedev-buildspec.yml. Поэкспериментируйте с другими изменениями, например, создайте новую ветку/тег, чтобы увидеть результат.

Извлечение изменений из зеркала

Наше зеркало GitHub может принимать запросы на извлечение изменений от участников, поэтому давайте настроим OneDev на извлечение изменений из него:

  1. Продолжайте редактировать спецификацию сборки выше, добавьте задание Pull from GitHub и добавьте шаг типа Repository Sync / Pull from Remote, как показано ниже:

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

  1. Добавьте триггер задания типа cron для запуска задания в запланированное время, например, в 1:00 утра каждую ночь:

  2. Если к вашему экземпляру OneDev есть публичный доступ, вы можете настроить GitHub на запуск этого задания по изменению зеркала. Это можно сделать, создав webhook на стороне GitHub, как показано ниже:

url полезной нагрузки определяется как:

http://onedev.example.com/api/trigger-job?project=test&job=Pull%20from%20GitHub&branch=master&access-token=<OneDev access token>
Войти в полноэкранный режим Выйти из полноэкранного режима

Здесь onedev.example.com — это dns имя доступа к вашему экземпляру OneDev. Имя задания закодировано в url, так как содержит пробел. должно быть заменено маркером доступа пользователя OneDev с правами на выполнение задания, как показано ниже::

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rkjcdnaopfq3oych4xea.png)
Вход в полноэкранный режим Выйти из полноэкранного режима

Для производственного использования важно включить протокол https для url полезной нагрузки, чтобы избежать утечки маркера доступа.

Сохраните webhook, и OneDev будет извлекать данные из зеркала GitHub при каждом изменении.

Заключение

Мы завершили настройку двусторонней синхронизации репозитория OneDev и его зеркала GitHub. Поскольку это обычное задание CI, мы можем подписаться на определенные запросы сборки, чтобы получать уведомления о сбоях синхронизации, проверять журнал сборки для расследования сбоев синхронизации, или даже настроить параметры ресурсов задания, чтобы контролировать использование ресурсов несколькими заданиями синхронизации и т.д.

Спасибо за прочтение!

Оцените статью
Procodings.ru
Добавить комментарий