Рубрики
Uncategorized

Github и Gitlab синхронизация

И GitHub, и Gitlab — это отличные способы размещения ваших репозиторий Git онлайн. У них оба имеют отличный инструмент … Теги от Github, DevOps, Tooling, Git.

И GitHub, и Gitlab — это отличные способы размещения ваших репозиторий Git онлайн. У них оба имеют отличные инструменты для управления вашим проектом, будьте его открытым исходным или личным кодом. Я не собираюсь сравнивать обе службы в глубине, так как многие направляющие уже делают это. Для меня общее разницу между Github и Gitlab — Gitlab, ориентирован на больше усилий по трубопроводам и инструментам CI/CD для компаний, в то время как GitHub больше сосредоточен на сообществе и создает платформу, чтобы поделиться с открытым исходным кодом. Оба могут быть использованы для любого сценария … что делает его действительно трудно выбрать между ними!

Но что, если я сказал вам, вам не нужно было выбирать O_O?

Почему я хочу использовать как gitlab, так и github

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

Мне нравится уметь организовать свои репозитории в проекты (или группы в GitLab). К сожалению, GitHub не делает этого. Я также хочу иметь возможность достичь как можно больше людей с моим репозиториями, Github имеет наибольшее сообщество. Черт возьми, я застрял, хочу функции обоих провайдеров.

К счастью для меня, Gitlab имеет две вещи, которые делают симбиоз между двумя возможными инструментами:

  1. Репозиторий Github Import. Это делает импорт репозитория из GitHub Super легко
  2. Синхронизация репозитории от GitLab -> Github (бесплатно) Это позволяет мне использовать Gitlab в качестве основного источника истины, но также иметь хранилище на GitHub. Я могу использовать выпуск Github Tracker, Wiki и Forum (дискуссия GitHub)
  3. Great Ci/CD (хорошо, я солгал, когда я сказал две вещи)

Этот простой. Вы можете настроить некоторые CI/CD сами. Но Gitlab автоматически сделает это для вас.

  1. Перейдите в «Настройки> Репозиторий> Репозитории зеркалирования»
  2. Введите репо GitHUB с вашим именем пользователя перед https://<имя пользователя github> @ github.com/путь/к/ваше/refo.git
  3. В поле Пароль введите токен GitHub
  4. Выберите толчок (Это требует подписки)
  5. Нажмите зеркальный репозиторий

Отныне изменения в Gitlab будут отражаться на Github

Есть два способа сделать это (оба эквивалентны только с противоположных платформ)

  1. Либо вы устанавливаете CI/CD-трубопровод на GitHub, который вызывает, используя веб -ook (на запросах на push и pull).
  2. Либо вы устанавливаете CI/CD-трубопровод на GitLab, которые триггеры используют веб -ook (на запросах на push и pull). Оказывается, это на самом деле премиум … Вы не можете использовать Thult Webhook, не платя сейчас

Я лично решил сделать это с стороны GitHub, поскольку метод GitHub свободен

Метод 1 GitHub CI/CD

  1. Создайте следующие секреты в вашем репозитории GitHUB
    1. Target_url. Значение: URL-адрес хранилища GitLab
    2. Target_token ценность: Gitlab Token
    3. Target_username ценность: Username gitlab.
  2. Создайте действие GitHub для вашего репозитория следующим кодом:
name: GitlabSync

on:
  - push
  - delete

jobs:
  sync:
    runs-on: ubuntu-latest
    name: Git Repo Sync
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - uses: wangchucheng/git-repo-sync@v0.1.0
      with:
        # Such as https://github.com/wangchucheng/git-repo-sync.git
        target-url: ${{ secrets.TARGET_URL }}
        # Such as wangchucheng
        target-username: ${{ secrets.TARGET_USERNAME }}
          # You can store token in your project's 'Setting > Secrets' and reference the name here. Such as ${{ secrets.ACCESS\_TOKEN }}
        target-token: ${{ secrets.TARGET_TOKEN }}
  1. Убедитесь, что ветвь, которую вы нажатием в GitLab, не защищены или допускают нажим

Способ 2 Gitlab CI/CD (требуется GitLab Premium)

Обратите внимание, что если у вас есть подписка с GitLab, вы также можете сделать это за несколько кликов в одном ашпионе, что и настроив синхронизацию от GitLab в Github.

Перейдите в «Настройки> Репозиторий> Репозитории зеркалирования»

  1. Введите репо GitHUB с вашим именем пользователя перед https://<имя пользователя github> @ github.com/путь/к/ваше/refo.git
  2. В поле Пароль введите токен GitHub
  3. Выберите Pull (это требует подписки)
  4. Нажмите зеркальный репозиторий

Ручная настройка

Настройка веб-капонов

Если вы создали проект GitLab через инструмент импорта GitHub, вы можете полностью пропустить этот шаг.

  1. В вашем репозитории GitHub перейдите в «Настройки> веб-кавказки»
  2. Создать новый веб -ook
    • Путь полезной нагрузки: https://gitlab.com/API/V4/projects/>/Зеркало/Pull (Идентификатор проекта можно найти в «Настройках> Общие»)
    • Тип содержимого: Приложение/JSON
    • Проверение SSL: выключенный
    • Только отправить для: толкать и тянуть
  3. Активировать

  4. В проекте GitLab перейдите в «Настройки> веб-кавказки»

  5. Выберите Толкать события из репозитория и введите репозиторий GitHUB (с токеном, если он является частным)

Настройка переменных CI/CD

  1. В проекте GitLab Перейдите в «Настройки> CI/CD> Переменные»
  2. Создайте переменную с помощью ключа: Access_Token и значение: (сделать его скрытым, потому что это чувствительно)

    1. Создайте переменную с помощью ключа: Remote_Repository_url и ценность: <Ваш токен GitHub> @ <ваш репозиторий URL> (Сделай его скрытым, потому что это чувствительно)

Настройка CI/CD

  1. Создайте трубопровод, иду на «CI/CD> Editor» или создавая файл .gitlab-ci.yml В вашем корневом проекте и добавьте следующий контент:
sync-with-github:
  before_script:
    - git config --global user.name "${GITLAB_USER_NAME}"
    - git config --global user.email "${GITLAB_USER_EMAIL}"
  script:
    - git remote add github $REMOTE_REPOSITORY_URL
    - git checkout master
    - git pull origin master
    - git pull github master
    - git status
    - git push http://root:$ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:master

Это не приходит без нисходящих. Вот несколько я нашел при тестировании этой настройки.

  • Вики, проблемы, обсуждения, доски и т. Д. Не будут синхронизироваться между двумя провайдерами хостинга. Это будет только синхронизировать, что в вашем хранилище. Есть способы синхронизации Wikis (Wiki по существу является скрытым хранилищем .git, а github, и gitlab используют один и тот же формат wiki)
  • Это может быть запутано иметь два удаленных репозитория одновременно
  • Они могут выйти из синхронизации, если несколько коммитов происходят в двух местах одновременно и создают конфликты (я использую это только на репозиториях, которые я и только использую)

Оригинал: «https://dev.to/brunorobert/github-and-gitlab-sync-44mn»