Назад | Перейти на главную страницу

GITLAB: перенос репозиториев со старого gitlab на gitlab на основе Docker

У меня был Gitlab на RaspberryPi несколько лет. Теперь я хочу переместить репозитории в Gitlab на основе докеров. Лучше всего со всеми настройками.

Я прочитал инструкции и попробовал следующее в отношении данных:

  1. Я скопировал содержимое:

    • / etc / gitlab
    • / var / opt / gitlab / git-data
      и контейнер gitlab разбился ...
  2. Я скопировал содержимое:

    • / etc / gitlab
    • / var / opt / gitlab
      и контейнер gitlab разбился ...
  3. Я скопировал содержимое:

    • / etc / gitlab
      и запуск контейнера gitlab ...
      Хотя настройки Gitlab должны находиться в / etc / gitlab, данные пользователя или группы не были переданы. Появится «самый первый» экран, где вы должны установить пароль root и т. Д. Кроме того, я заметил, что новый Gitlab хранит репозитории в / var / opt / gitlab / git-data / repositories / @ hashed / а не в формате /var/opt/gitlab/git-data/repositories/group-or-user-name/reponame.(wiki.)git как раньше.

Итак, мой вопрос:

  1. Что мне нужно скопировать в настройки пользователя и группы порта?
  2. Как портировать репозитории?
  3. Что мне нужно скопировать / зарезервировать, чтобы иметь возможность восстановить GITLAB в будущем?

РЕДАКТИРОВАТЬ (A) - Экспериментируйте только с контейнерами

docker run \
    --detach \
    --rm \
    --name gitlab \
    --network host \
    --volume ${PWD}/etc/gitlab:/etc/gitlab \
    --volume ${PWD}/var/opt/gitlab:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Если я создаю контейнер с помощью этой команды, сделайте что-нибудь с GITLAB, а не удалите контейнер и запустите новый: Это работает. В этом случае версии GITLAB одинаковы для обоих контейнеров.

Следуя подсказке c4f4t0r, я решил проблему следующим образом:

  1. Запуск старого Gitlab v9.2.7 на RaspberryPi и создание резервной копии (Резервные копии). Обратите внимание, что помимо самой резервной копии, каталог / etc / gitlab также должны быть зарезервированы отдельно.
  2. Поскольку восстановление резервной копии возможно только для точно такая же версия и тип (CE / EE) GitLab (Резервное копирование и восстановление GitLab), Я создал контейнер Gitlab gitlab/glitlab-ce:9.2.7-ce.0 и восстановил в нем бэкап.

    1. Я выбрал следующую структуру папок на хосте докеров:
    /mnt/gitlab_ws/
    ├── backups/          <-- contains timestamp_9.2.7_gitlab_backup.tar
    ├── etc/gitlab/       <-- contains gitlab.rb; gitlab-secrets.json and ssh stuf
    ├── git-data/         <-- initially empty
    └── var/opt/gitlab/   <-- initially empty
    
    1. Я выбрал следующую структуру папок в контейнере докера:
    /
    ├── etc/gitlab/
    ├── mnt/gitlab_ws/backups/   <-- to be set in */etc/gitlab/gitlab.rb*
    ├── mnt/gitlab_ws/git-data/  <-- to be set in */etc/gitlab/gitlab.rb*
    └── var/opt/gitlab/
    
    1. запущен gitlab
    ./run_gitlab.sh 9.2.7
    
    1. Обеспечьте правильные разрешения на запись. Если вы установите разрешения на стороне хоста, разрешения в контейнере могут отличаться. Вы можете установить правильные права доступа после запуска контейнера:
    docker exec -it gitlab chown -R git:git /var/opt/gitlab/ /etc/gitlab /mnt/gitlab_ws/git-data /mnt/gitlab_ws/backups
    
    1. Восстановить резервную копию
    ./restore_backup.sh
    
    1. Убедитесь, что Gitlab теперь работает правильно, показывая все репозитории и пользователей (если нет, проблема может быть связана с правами доступа / etc / gitlab), а в репозиториях есть ожидаемое содержимое (в противном случае проблема может быть связана с git-data установка пути в /etc/gitlab/gitlab.rb или права доступа.).
  3. Я связал том / var / opt / gitlab / на мой хост, чтобы можно было обновить Gitlab, запустив контейнер gitlab с более высокой версией. Помните, что обновление возможно только между минорными версиями (Обновить).

./run_gitlab.sh 9.3.0

После запуска более высокого уровня gitlab (статус контейнера становится «здоровым» - это может занять некоторое время) вы должны перенастроить gitlab:

./reconfigure_gitlab.sh

С этого момента вы можете повторять последние шаги, пока не достигнете желаемой версии. Вы также можете автоматизировать это;)


run_gitlab.sh

#/bin/bash

GITLAB_WS_PATH='/mnt/gitlab_ws'

if [ $# -eq 0 ]
then
        TAG='latest'
else
        TAG=$1-ce.0
fi

docker run \
        --name gitlab \
        --detach \
        --restart always \
        --network host \
        --volume $GITLAB_WS_PATH/git-data/:/mnt/gitlab_ws/git-data \
        --volume $GITLAB_WS_PATH/var/opt/gitlab:/var/opt/gitlab \
        --volume $GITLAB_WS_PATH/etc/gitlab:/etc/gitlab \
        --volume $GITLAB_WS_PATH/backups:/mnt/gitlab_ws/backups \
        gitlab/gitlab-ce:${TAG}

restore_backup.sh

#!/bin/bash

DE="docker exec -it gitlab"

${DE} gitlab-ctl stop unicorn
${DE} gitlab-ctl stop sidekiq
${DE} gitlab-rake gitlab:backup:restore
${DE} gitlab-ctl reconfigure
${DE} gitlab-ctl restart

reconfigure_gitlab.sh

#!/bin/bash

DE="docker exec -it gitlab"

${DE} gitlab-ctl stop
${DE} gitlab-ctl reconfigure
${DE} gitlab-ctl start