????????自從用Docker來部署GitLab應(yīng)用之后,除了17年春節(jié)前那一次操作不當(dāng),差點(diǎn)刪庫走路,平時使用起來倒也十分穩(wěn)定。記得那次操作不當(dāng),源自于想給GitLab備份及升級,由于當(dāng)時剛接觸Docker不久,也不知誰給的勇氣,經(jīng)過一系列簡單的Google后,我在做了一系列自以為是的備份后,就開始動手進(jìn)行GitLab的系統(tǒng)升級,只記得當(dāng)時花了5個小時才從刪庫走路的邊緣才救了回來,吃了對Docker不熟悉的虧。
????????經(jīng)過了上面的事件后,后面一直沒有投入時間來解決這個問題。最近由于看到10版本增加的Auto DevOps、新版的UI以及一堆的提升,心癢癢的。紙上得來終覺淺,絕知此事要躬行,于是乎在一個風(fēng)和日麗的中午,動手開始了進(jìn)行GitLab的無損升級,本次升級,從原版本8.14.3升級到10.6.3。
先上舊版成新版的對比成果照。
舊版
新版
????????基于Docker部署的GitLab無損升級,目前我想到的應(yīng)該有兩種方案,一就是升級Docker鏡像,復(fù)用舊鏡像的掛載文件,還有另外一種方式就是進(jìn)入Docker容器去直接升級GitLab,本著先簡單后復(fù)雜的原則,我先嘗試基于Docker鏡像升級,再嘗試進(jìn)入Docker容器去直接升級GitLab。
????????動手之前,請先做好備份工作,切記?。?!最好是克隆一個新的環(huán)境來操作。為了避免影響到大家使用,我先克隆了一臺新的虛擬機(jī),所有的改動都是基于這個新的虛機(jī)上進(jìn)行操作。
1.基于Docker鏡像升級(失?。?/strong>
????????網(wǎng)上的很多教程都說用Docker鏡像升級很簡單,只要基于下面幾條命令就可以。
(1) 執(zhí)行命令拉取最新的鏡像。
docker pull gitlab/gitlab-ce
(2) 停止當(dāng)前運(yùn)行的GitLab容器。
docker stop 容器標(biāo)識 (docker ps可以查看容器標(biāo)識)
(3) 刪除該容器。
docker rm 窗口標(biāo)識
(4) 創(chuàng)新GitLab新版本的容器。
docker run \ --publish 443:443 --publish 10080:80 --publish 10022:22 \ --name gitlab \ --volume /u1/gitlab/config:/etc/gitlab \ --volume /u1/gitlab/logs:/var/log/gitlab \ --volume /u1/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce
????????實(shí)際上經(jīng)過我的實(shí)操,發(fā)現(xiàn)實(shí)際的情況無法無損升級。新的版本正常安裝后,啟動時會報數(shù)據(jù)庫版本不一致,不允許啟動的情況。(當(dāng)時沒有去執(zhí)行,gitlab-rake db:migrate這個升級數(shù)據(jù)庫關(guān)系的命令,也許執(zhí)行這個后可以正常啟動,這個等找機(jī)會再驗(yàn)證一下。)這也可能是我操作不當(dāng)導(dǎo)致這個方法不成功,希望有成功的同學(xué)可以指教一下。
2.進(jìn)入Docker容器直接升級GitLab(成功)
關(guān)于這一個操作,網(wǎng)上基本沒有什么可參考的經(jīng)驗(yàn),只好憑經(jīng)驗(yàn)自己摸索。
(1)去官網(wǎng)下載最新版的GitLab
這里官網(wǎng)由于GW的關(guān)系打開會很慢,推薦去清華的安裝源進(jìn)行下載。
例如:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/trusty/main/g/gitlab-ce/
????????由于我的操作系統(tǒng)是ubuntu的,所以下載基于ubuntu的deb安裝文件,其他系統(tǒng)請根據(jù)實(shí)際情況選擇下載對應(yīng)的deb安裝文件。
(2)上傳deb文件并且移動到docker容器映射出來的掛載地址
我將deb文件上傳到映射出來的GitLab的默認(rèn)備份文件夾,在容器中的路徑為/var/opt/gitlab/backups。
(3)進(jìn)入容器
docker exec -it 容器標(biāo)識 /bin/bash (docker ps可以查看容器標(biāo)識)
(4) 停止服務(wù)
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
(5)執(zhí)行安裝新版的GitLab
dpkg -i gitlab-ce_10.6.3-ce.0_amd64.deb
(安裝一般都不會出現(xiàn)異常,如果安裝失敗,在最后會有相關(guān)的錯誤提示,請根據(jù)錯誤進(jìn)行處理,再嘗試重新執(zhí)行一次安裝)
(6)更新數(shù)據(jù)庫關(guān)聯(lián)信息
gitlab-rake db:migrate
(此處執(zhí)行時間較久,請耐心等待)
(7)重啟服務(wù)
gitlab-ctl restart
????????在安裝及服務(wù)啟動的過程中,可以方便通過Docker的logs命令來觀察GitLab的啟動及運(yùn)行狀態(tài),只需執(zhí)行"docker logs 容器標(biāo)識 -f"即可。經(jīng)過上述的7步操作后,無損升級基本完成,等待服務(wù)正常重啟后即可正常對外提供服務(wù)。接下來可以找時間好好研究一下新版的特性及Auto DevOps了。