記一次Gitlab的升級過程

公司的gitlab是一年多前安裝的,還是比較老的7.6.2版本,各種問題導致迫切需要升級到較新的版本。為了保證平時的正常使用,只能在假期進行升級。所以利用端午節(jié)假期搞了2天,折騰了幾次才搞明白。不過升級過程中的辛苦還是值得的,不僅新的版本在各種功能、UI上有優(yōu)化,而且我對gitlab也更加熟悉了。

根據(jù)gitlab官網(wǎng),升級采用Omnibus的自動安裝方式。由于是升級,只要更新yum的庫并下載最新包即可。

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

這種更新方式相當于對源碼做了一層包裝,可以通過更改gitlab.rb文件更新所有的配置,而不是直接去修改gitlab.yml, 數(shù)據(jù)庫的config.yml等文件。如果是通過源碼編譯安裝/更新,相信會更加復雜。

安裝的過程比較順利,但肯定不是一下子搞定的,下面一步步的記錄錯誤的原因和解決方案,希望對別人有幫助。

PostgreSql的庫結(jié)構(gòu)問題
自動安裝提示完成,但數(shù)據(jù)庫不可用,用status查看是處于down狀態(tài),看了日志(/var/log/gitlab/postgresql/current),如下報錯

The data directory was initialized by PostgreSQL version 9.2.18, which is not compatible with this version 9.6.2.

大意是新版數(shù)據(jù)庫結(jié)構(gòu)不兼容老的。這個問題解決還算順利,網(wǎng)上不少資料,主要參考的是這篇
http://blog.10ninox.com/2015/01/psql-database-incompatible/
處理后不再顯示該錯誤,而出現(xiàn)以下的錯誤。

PostgreSql的IPv6問題
還是同樣的日志,顯示如下錯誤

Address family not supported by protocol

一般這種都是IPv6導致,查了些資料,解決辦法是在/var/opt/gitlab/postgresql/data中修改postgresql.conf文件

將listen_addresses改為127.0.0.1

完全調(diào)試完成后,發(fā)現(xiàn)該值被改為了空字符串,說明也沒問題。

PostgreSql的Migrate問題
解決上述問題后,需要執(zhí)行數(shù)據(jù)庫的migrate命令,如下

gitlab-rake db:migrate

這時會出現(xiàn)一個pg_trgm問題,大意是沒有創(chuàng)建extension記錄。參考這里官方的文檔
https://docs.gitlab.com/ce/install/installation.html

不過注意創(chuàng)建extends時,數(shù)據(jù)庫不是template1,而是gitlabhq_production
重新整理這個步驟如下

step 1: sudo -u gitlab-psql psql -d template1 -c "CREATE USER git CREATEDB;"
step 2: sudo -u gitlab-psql psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"(可能不需要)
step 3: sudo -u gitlab-psql psql -d gitlabhq_production -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"

之后再次運行migrate腳本,問題解決。

unicorn的啟動權(quán)限問題
unicorn線程是用git用戶啟動的,必須遞歸的給

/opt/gitlab/embedded/service/gitlab-rails/

目錄的訪問權(quán)限,否則啟動會失敗,或者界面出不來(具體現(xiàn)象我記不清了)。

gitlab-shell的check問題
在做系統(tǒng)檢查(gitlab-rake gitlab:check)時,會出現(xiàn)一個找不到.gitlab_shell_secret的問題,貌似不影響啟動和使用,解決也不叫簡單,調(diào)用以下命令

ln -s /var/opt/gitlab/gitlab-shell/gitlab_shell_secret ../gitlab-rails/.gitlab_shell_secret

增加軟連接即可。

reconfigure不生效問題
這是這次升級最大的坑,更新gitlab.rb文件后,根據(jù)各種文檔描述都是要執(zhí)行reconfigure命令,我也執(zhí)行了很多次。但是就是感覺各種配置沒有改,命令行運行也不報錯。偶然發(fā)現(xiàn)這個命令是有日志的,目錄是

/var/log/gitlab/reconfigure

查看日志才發(fā)現(xiàn)所有的嘗試都沒有執(zhí)行,又是一個地址族不支持。查了資料讓改源代碼的localhost或者看/etc/hosts的配置,打開后者一看,乖乖,居然把ipv4的localhost注釋掉了,只留了ipv6的,打開注釋,一切正常。

至此基礎(chǔ)配置完成,我們需要修改git庫位置,能夠reconfigure就一切順利了,所有功能基本恢復。

總結(jié)

這次升級時間緊,原庫升級幾乎沒給自己留后路,在問題的解決中發(fā)現(xiàn)gitlab本身的管理還是非常完善的,特別是這種Omnibus的自動安裝方式。發(fā)現(xiàn)的這些錯誤網(wǎng)上基本都有解決方案,沒有的一般也要從自己的環(huán)境上找原因。

gitlab比較重要的目錄/文件

主配置文件:/etc/gitlab/gitlab.rb
程序安裝目錄:/opt/gitlab
程序配置和運行目錄:/var/opt/gitlab
程序日志目錄:/var/log/gitlab

gitlab重要的命令

升級數(shù)據(jù)庫:gitlab-rake db:migrate
顯示配置環(huán)境:gitlab-rake gitlab:env:info
檢查gitlab運行環(huán)境:gitlab-rake gitlab:check
gitlab安裝(慎用,會清數(shù)據(jù)庫):gitlab-rake gitlab:setup
gitlab啟動/停止/重啟:gitlab-ctl start/stop/restart

新的ui還是不錯的,管理頁面將信息都放到了上面,如下圖所示:

新的UI

有些問題可能我也沒有碰到,可以一塊研究,有問題給我留言哈!

【補充:2018-1-16】訪問出現(xiàn)forbidden的現(xiàn)象,換用4G網(wǎng)絡(luò)問題解決。參考以下文章,可以解決問題:
http://www.cnblogs.com/jianxuanbing/p/7661306.html

【補充:2018-02-16】9.2.2升級到10.4.3

  1. 使用本文開頭的命令用yum升級;中途升級數(shù)據(jù)庫可能有問題,提示里又一個skip的命令,可以執(zhí)行,然后升級安裝包成功;
  2. 要使用gitlab-ctl reconfigure命令做一次重新更新。之前用status看,有幾個命令沒有服務沒有起來,unicorn還有目錄權(quán)限的問題(這里chmod了一下,估計要是先做reconfigure就不需要了)
  3. restart服務后,所有服務都起來了,界面也變成了新的,這次更新比較順利,開心!


    GitLab 10.4.3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容