0 Votes

Обновление Gitlab через несколько релизов

Last modified by Сергей Коршунов on 2022/05/26 21:44

Обновление Gitlab через несколько релизов

С обновление Gitlab есть небольшие нюансы. Если вы не обновляетесь регулярно, то в какой-то момент спустя несколько релизов не сможете это сделать штатно через пакетный менеджер и репозиторий. Необходимо соблюдать определенную последовательность этапов обновления. Об этом я подробно расскажу далее.

Онлайн-курс по Kubernetes – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes Самый полный русскоязычный курс по очень востребованным и хорошо оплачиваемым навыкам Курс не для новичков – нужно пройти вступительный тест

Некоторое время назад мне понадобилось обновить устаревшую версию Gitlab 12.7.5, установленную в Centos 7 из репозитория разработчиков. Для начала попробовал просто сделать yum update в надежде, что все произойдет само, но чуда не случилось. В репозитории последней версией уже была 14-я, а на нее так просто не перейти. Я получил ошибку:

gitlab preinstall: It seems you are upgrading from major version 12 to major version 14.
gitlab preinstall: It is required to upgrade to the latest 13.0.x version first before proceeding.
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/README.html#upgrade-paths

https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-01.png

Делать нечего, пошел читать документацию. Там четко прописана последовательность, по которой нужно обновляться, чтобы получить самую последнюю версию. В моем случае цепочка обновлений получалась следующая: 12.7.5 -> 12.9.2 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.10 -> 14.0.11 -> 14.1.6. Обязательно делаем бэкап и приступаем к обновлению gitlab до последней версии.

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

# yum install gitlab-ee-12.9.2-ee.0.el7.x86_64

И так далее для всех остальных релизов.

# yum install gitlab-ee-12.10.14-ee.0.el7.x86_64
# yum install gitlab-ee-13.0.14-ee.0.el7.x86_64
# yum install gitlab-ee-13.1.11-ee.0.el7.x86_64
# yum install gitlab-ee-13.8.8-ee.0.el7.x86_64
# yum install gitlab-ee-13.12.10-ee.0.el7.x86_64
# yum install gitlab-ee-14.0.11-ee.0.el7.x86_64

После этого на момент написания статьи до самой последней версии можно обновиться штатно:

# yum update gitlab-ee

Если после написания статьи выйдут следующие промежуточные версии, просто добавьте их в цепочку обновлений в соответствии с таблицей в документации. Сам принцип обновления gitlab будет такой же.

С ошибкой я столкнулся только при обновлении gitlab с версии 14.0 до 14.4. Ошибка связана с миграциями базы данных и описана в документации - Batched background migrations. Текст ошибки примерно такой:

StandardError: An error has occurred, all later migrations canceled: Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active': {:job_class_name=>"CopyColumnUsingBackg roundMigrationJob", :table_name=>"push_event_payloads", :column_name=>"event_id", :job_arguments=>[["event_id"], ["event_id_convert_to_bigint"]]}

StandardError: An error has occurred, all later migrations canceled

В тексте ошибки представлено решение в виде завершения миграции вручную. Но это не сильно поможет, так как при следующем запуске будет эта же ошибка, только с другой миграцией. Я попробовал раза 3-4 проделать это вручную, но не помогло. Пошёл читать статью, там всё есть. Вам надо посмотреть, если у вас незавершённые миграции. Для этого выполните:

# gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'

Если получите число больше нуля, значит какие-то миграции не завершены. Завершите их:

# gitlab-rails c > scheduled_queue = Sidekiq::ScheduledSet.new > pending_job_classes = scheduled_queue.select { |job| job["class"] == "BackgroundMigrationWorker" }.map { |job| job["args"].first }.uniq > pending_job_classes.each { |job_class| Gitlab::BackgroundMigration.steal(job_class) }

Напоминаю, что это информация доступна по ссылке выше. Там всё подробно описано. После этого выполняем:

# gitlab-rake db:migrate
# gitlab-ctl reconfigure
# gitlab-ctl restart

После этого gitlab версии 14.4 нормально запустился.

Так же после обновления gitlab с более старых версий вы можете увидеть предупреждение о том, что можно обновить версию postgresql до 12 или выше. Автоматически база данных не обновляется. Инструкция по ее обновлению так же есть в документации. Для этого существует команда:

# gitlab-ctl pg-upgrade

https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-02.png

Она все сделает сама, обновив postgresql до последней поддерживаемой версии. Результатом успешного обновления базы gitlab будет примерно следующее сообщение.

https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-03.png

==== Upgrade has completed ====
Please verify everything is working and run the following if so
sudo rm -rf /var/opt/gitlab/postgresql/data.11
sudo rm -f /var/opt/gitlab/postgresql-version.old

Вот и все. Мы полностью обновили gitlab через несколько релизов до самой последней версии. Удивительно, как такой масштабный и многокомпонентный продукт как gitlab так четко обновляется. Сколько с ним работаю, никогда не сталкивался с проблемами во время обновления. При этом постоянно опасаюсь, как бы что-нибудь не пошло не так. Так что бэкапы перед обновлением обязательно должны быть и желательно всей виртуалки.