Введение
Прилетело мне тут на сервере обновление GitLab, в котором у меня хранятся все рабочие и пет-проекты, но при обновлении вылезло следующее сообщение:
gitlab preinstall: It seems you are upgrading from major version 13 to major version 14.
gitlab preinstall: It is required to upgrade to the latest 14.0.x version first before proceeding.
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/README.html#upgrade-paths
Ну и после него, само собой, менеджер пакетов сказал, что обновление не удалось. Методом поверхностного гуглежа выяснилось, проблема кроется в том, что обновление прилетело с мажорной версией GitLab, а не в пределах одной глобальной версии (с 13 до 14), а это требует некоторых плясок с бубном. Давайте спляшем вместе!
Бэкап текущей версии
Золотое правило любых действий на боевом сервеве — сделай бэкап! Как говорится, админы делятся на тех кто не делает бэкапы, и тех кто уже делает. Поэтому перед обновлением сделаем резервную копию всего, что было наработано.
Делаем резервную копию данных
Сделать резервную копию можно средствами самого Gitlab, для этого нужно воспользоваться командой gitlab-backup create
. В результате выполнения будет создан файл резервной копии в каталоге /var/opt/gitlab/backups
с именем типа такого 1626962136_2021_07_22_13.11.3-ee_gitlab_backup.tar
.
Далее следует сделать резервную копию каталога настроек и прочих системных плюшек. Сделать это можно также средствами самого GitLab, выполнив команду gitlab-ctl backup-etc
, в результате выполнения которой в каталоге /etc/gitlab/config_backup
будет создан файл с именем наподобие gitlab_config_1626966190_2021_07_22.tar
.
Копируем бэкап на локальную машину
Если не делать бэкапы — это просто глупость, то делать их и хранить на том же самом сервере — это глупость не сильно меньшая, чем первая. Далее я предпочитаю скопировать созданные бэкапы на свою локальную машину, где у меня есть специальная директория для бэкапов (которые потом можно либо записать на стриммер, либо скинуть на внешний диск, либо просто оставить как есть). Воспользоваться для этого можно всеми любимой командой scp
, которая позволяет копировать файлы между машинами по SSH. Если при этом настроены ключи, то копирование занимает буквально одну команду.
Копируем созданные бэкапы на свою машину (перед этим нужно перейти в каталог, куда будем копировать бэкап):
scp root@your.server:/var/opt/gitlab/backups/1626962136_2021_07_22_13.11.3-ee_gitlab_backup.tar ./
scp root@your.server:/etc/gitlab/config_backup/gitlab_config_1626962599_2021_07_22.tar ./
Для тех, кто в танке: сначала указываем то, что копируем, потом то, куда. Также здесь работает автокомплит, после :
можно нажимать Tab, и все будет работать как и в локальном терминале, за исключением того, что дополняться будут пути с удаленной машины.
Обновление GitLab
Для начала нужно узнать, какая версия установлена на вашем сервере. Посмотреть это можно по пути your.gitlab/help
, там прямо вверху будет написана версия.
После этого идем сюда и смотрим порядок обновления до последней версии с вашей. В моем случае это было так: 13.11.3 -> 13.12.8 -> 14.0.6 -> 14.1.0
. Записываем порядок, чтобы не лазить постоянно в документацию.
Далее смотрим список доступных пакетов в репозитории. У меня на сервере Ubuntu Server, поэтому я делал это командой apt-cache showpkg gitlab-ee | grep 13.12
. В результате менеджер пакетов покажет все доступные варианты с нужной версей:
13.12.8-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.7-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.6-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.5-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.4-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.3-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.2-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.1-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.0-ee.0 (/var/lib/apt/lists/packages.gitlab.com_gitlab_gitlab-ee_ubuntu_dists_focal_main_binary-amd64_Packages)
13.12.8-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.7-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.6-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.5-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.4-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.3-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.2-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.1-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.0-ee.0 - openssh-server (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null)) gitlab-ce (0 (null)) gitlab (0 (null))
13.12.8-ee.0 -
13.12.7-ee.0 -
13.12.6-ee.0 -
13.12.5-ee.0 -
13.12.4-ee.0 -
13.12.3-ee.0 -
13.12.2-ee.0 -
13.12.1-ee.0 -
13.12.0-ee.0 -
Ставить нужно максимально доступную, то есть в моем случае это 13.12.8-ee.0
. Устанавливаем ее командой apt install --only-upgrade gitlab-ee=13.12.8-ee.0
. Установка занимает довольно долгое время, поэтому можно смело пойти заваривать чай. После успешного завершения установки смотрим на ранее записанный порядок действий и повторяем снова предыдущие шаги (кроме бэкапа, конечно), меняя версию на следующую. Если порядок был выписан верно, все должно сработать без ошибок.
После завершение последней итерации обновлений рекомендую обновить PostgreSQL, что можно сделать также средствами самого GitLab:
gitlab-ctl pg-upgrade
.
Обновление конфигурации и перезапуск
После всех этих процедур рекомендую обновить конфигурацию командой gitlab-ctl reconfigure
, а затем перезапустить командой gitlab-ctl restart
.