0 Голосов
Редактировал(а) Сергей Коршунов 2022/05/26 21:44

Скрыть последних авторов
Сергей Коршунов 1.1 1 = Обновление Gitlab через несколько релизов =
2
3 С обновление Gitlab есть небольшие нюансы. Если вы не обновляетесь регулярно, то в какой-то момент спустя несколько релизов не сможете это сделать штатно через пакетный менеджер и репозиторий. Необходимо соблюдать определенную последовательность этапов обновления. Об этом я подробно расскажу далее.
4
5 **Онлайн-курс по Kubernetes** – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes Самый полный русскоязычный курс по очень востребованным и хорошо оплачиваемым навыкам Курс не для новичков – нужно пройти [[вступительный тест>>url:https://serveradmin.ru/ootus-kuber-txt]]
6
7
8 Некоторое время назад мне понадобилось обновить устаревшую версию Gitlab 12.7.5, [[установленную в Centos 7>>url:https://serveradmin.ru/ustanovka-i-nastroyka-gitlab/]] из репозитория разработчиков. Для начала попробовал просто сделать **yum update** в надежде, что все произойдет само, но чуда не случилось. В репозитории последней версией уже была 14-я, а на нее так просто не перейти. Я получил ошибку:
9
10 {{{gitlab preinstall: It seems you are upgrading from major version 12 to major version 14.
11 gitlab preinstall: It is required to upgrade to the latest 13.0.x version first before proceeding.
12 gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/README.html#upgrade-paths}}}
13
14 [[image:https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-01.png||height="341" width="1084"]]
15
16 Делать нечего, пошел читать [[документацию>>url:https://docs.gitlab.com/ee/update/README.html#upgrade-paths]]. Там четко прописана последовательность, по которой нужно обновляться, чтобы получить самую последнюю версию. В моем случае цепочка обновлений получалась следующая: **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 до последней версии.
17
18 Для того, чтобы установить конкретную версию, используем следующую команду yum:
19
20 {{{# yum install gitlab-ee-12.9.2-ee.0.el7.x86_64}}}
21
22 И так далее для всех остальных релизов.
23
24 {{{# yum install gitlab-ee-12.10.14-ee.0.el7.x86_64
25 # yum install gitlab-ee-13.0.14-ee.0.el7.x86_64
26 # yum install gitlab-ee-13.1.11-ee.0.el7.x86_64
27 # yum install gitlab-ee-13.8.8-ee.0.el7.x86_64
28 # yum install gitlab-ee-13.12.10-ee.0.el7.x86_64
29 # yum install gitlab-ee-14.0.11-ee.0.el7.x86_64}}}
30
31 После этого на момент написания статьи до самой последней версии можно обновиться штатно:
32
33 {{{# yum update gitlab-ee}}}
34
35 Если после написания статьи выйдут следующие промежуточные версии, просто добавьте их в цепочку обновлений в соответствии с таблицей в документации. Сам принцип обновления gitlab будет такой же.
36
37 С ошибкой я столкнулся только при обновлении gitlab с версии 14.0 до 14.4. Ошибка связана с миграциями базы данных и описана в документации - [[Batched background migrations>>url:https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#manually-finishing-a-batched-background-migration]]. Текст ошибки примерно такой:
38
39 {{{StandardError: An error has occurred, all later migrations canceled:
40
41 Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active': {:job_class_name=>"CopyColumnUsingBackg
42 roundMigrationJob", :table_name=>"push_event_payloads", :column_name=>"event_id", :job_arguments=>[["event_id"], ["event_id_convert_to_bigint"]]}}}}
43
44 [[~[~[image:https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-04.png~|~|alt="StandardError: An error has occurred, all later migrations canceled" height="665" width="1300"~]~]>>url:https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-04.png]]
45
46 В тексте ошибки представлено решение в виде завершения миграции вручную. Но это не сильно поможет, так как при следующем запуске будет эта же ошибка, только с другой миграцией. Я попробовал раза 3-4 проделать это вручную, но не помогло. Пошёл читать статью, там всё есть. Вам надо посмотреть, если у вас незавершённые миграции. Для этого выполните:
47
48 {{{# gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'}}}
49
50 Если получите число больше нуля, значит какие-то миграции не завершены. Завершите их:
51
52 {{{# gitlab-rails c
53 > scheduled_queue = Sidekiq::ScheduledSet.new
54 > pending_job_classes = scheduled_queue.select { |job| job["class"] == "BackgroundMigrationWorker" }.map { |job| job["args"].first }.uniq
55 > pending_job_classes.each { |job_class| Gitlab::BackgroundMigration.steal(job_class) }}}}
56
57 Напоминаю, что это информация доступна по ссылке выше. Там всё подробно описано. После этого выполняем:
58
59 {{{# gitlab-rake db:migrate
60 # gitlab-ctl reconfigure
61 # gitlab-ctl restart}}}
62
63 После этого gitlab версии 14.4 нормально запустился.
64
65 Так же после обновления gitlab с более старых версий вы можете увидеть предупреждение о том, что можно обновить версию postgresql до 12 или выше. Автоматически база данных не обновляется. [[Инструкция>>url:https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server]] по ее обновлению так же есть в документации. Для этого существует команда:
66
67 {{{# gitlab-ctl pg-upgrade}}}
68
69 [[image:https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-02.png||height="290" width="1075"]]
70
71 Она все сделает сама, обновив postgresql до последней поддерживаемой версии. Результатом успешного обновления базы gitlab будет примерно следующее сообщение.
72
73 [[image:https://serveradmin.ru/wp-content/uploads/2021/02/gitlab-upgrade-03.png||height="392" width="820"]]
74
75 {{{==== Upgrade has completed ====
76 Please verify everything is working and run the following if so
77 sudo rm -rf /var/opt/gitlab/postgresql/data.11
78 sudo rm -f /var/opt/gitlab/postgresql-version.old}}}
79
80 Вот и все. Мы полностью обновили gitlab через несколько релизов до самой последней версии. Удивительно, как такой масштабный и многокомпонентный продукт как gitlab так четко обновляется. Сколько с ним работаю, никогда не сталкивался с проблемами во время обновления. При этом постоянно опасаюсь, как бы что-нибудь не пошло не так. Так что бэкапы перед обновлением обязательно должны быть и желательно всей виртуалки.