介紹
由於想使用 gitlab 新版本添加的一些特性,最近項目不是很忙,故開始了作死的 gitlab 升級之旅。。。真的,沒事還是不建議升級這東西!很久沒弄 gitlab 很多東西都忘了,過程中各種踩坑,故寫一篇文章記錄下升級、安裝及配置的過程,希望對各位看官有點幫助。
開始
一般升級某個軟件直接去 官網 看更新教程即可,而其官網提示 CentOS 7 升級 gitlab 也很簡單,就兩步:
# 備份
sudo gitlab-rake gitlab:backup:create STRATEGY=copy
# 下載&安裝更新
sudo yum install -y gitlab-ce
一時興起,執行完第二步后發現,升級失敗,原因是我對 gitlab 版本過老(11.11.3),不能直接升級到 13.x 的版本,需要一個版本一個版本升,參考別人的踩坑經驗,選擇了
11.11.3 -> 12.0.12 -> 12.10.14 -> 13.0.10 -> 13.4.2 -> 13.9.1
這個版本升級路線
開始嘗試升級時,通過 curl
和 yum
的方式在服務器端進行 gitlab-ce 下載,然而經常會因為網絡問題中斷掉,換了國內鏡像源(清華源、阿里雲)依舊偶爾中斷,第一次更新,通過 yum
進行下載,到百分之九十多的時候進度條卡住了,繼續執行安裝操作,后面啟動時報錯(“STDOUT: WARNING: This version of GitLab depends on gitlab-shell 9.3.0, but you're running 9.1.0. Please update gitlab-shell.”),找了一晚上的處理方法,各種嘗試無果,估計是下載不完全強行安裝造成的某些包不對應,或者是之前手動改了一些配置文件導致的,后另起服務器重新安裝備份文件的對應版本 11.11.3 重新進行更新操作
系統&環境
- CentOS 7
- Gitlab-CE 11.11.3 -> 12.0.12 -> 12.10.14 -> 13.0.10 -> 13.4.2 -> 13.9.1
下載&安裝
由於國內原因,如果你想通過修改鏡像源來下載安裝 gitlab-ce 的安裝包,可以查看文末的“參考”鏈接,我不推薦這種做法,因為國內鏡像源不穩定,如清華源下載到500M左右就很不穩定,且有些同步不及時。我的做法是,在電腦本地開 VPN 去 官網下載 完所有文件后,再上傳到服務器上進行安裝
# 上傳本地文件到指定服務器
scp /path/filename username@servername:/path
上傳到服務器之后,需要先備份且停掉 gitlab 再進行安裝
# 創建備份
gitlab-rake gitlab:backup:create
# 停止 gitlab 各項服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
# 安裝指定版本 gitlab
rpm -Uvh gitlab-ce-12.0.12-ce.0.el7.x86_64.rpm
# 刷新配置
gitlab-ctl reconfigure
# 重啟 gitlab
gitlab-ctl restart
重復以上幾條命令,即可升級到最新版本,如果過程中有紅字提示“Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data..."可以暫時不管,升級到最新版本后再處理,報錯原因是 gitlab.rb 和 gitlab-secrets.json 兩個文件包含敏感信息。未被備份到備份文件中。需要手動備份,兩文件路徑分別為 /etc/gitlab/gitlab.rb
和 /etc/gitlab/gitlab-secrets.json
,如果需要使用舊版本的配置,將老版本的 gitlab.rb 文件替換新版本的 gitlab.rb 即可,gitlab-secrets.json 文件同理,不過這個是記錄了安全相關的,比如你訪問 Runners 頁面提示 500 報錯,就需要將舊版本替換掉新版
自動&定時備份
修改 /etc/gitlab/gitlab.rb
文件
# 設置備份存儲位置
gitlab_rails['backup_path'] = "/mnt/udisk/gitlab/backups"
# 備份最近七天的數據,即 7*24*60*60 秒
gitlab_rails['backup_keep_time'] = 604800
保存后,刷新配置文件
gitlab-ctl reconfigure
編輯定時任務
crontab -e
加入以下內容后保存(每天中午 12 點和傍晚 18 點自動執行備份操作)
0 12 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
0 18 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
保存后我們需要重新啟動定時器,執行如下語句
# 重啟定時任務
systemctl restart crond.service
# 重裝定時任務
systemctl reload crond.service
# 查看定時任務是否開啟(可選)
systemctl is-enabled crond.service
# 查看所有用戶下的定時任務(可選)
cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}
至此,自動定時備份完成