前端也可以學(xué)會(huì)的Gitlab Ci前端自動(dòng)部署

環(huán)境清單:

1,本機(jī)環(huán)境: Mac OSX

2,服務(wù)器環(huán)境:Centos7 ,nodejs,git

3,需要基礎(chǔ):一些基本服務(wù)器操作指令,git使用及了解gitlab平臺(tái)基本使用

注:這里演示的都是基礎(chǔ)能用的版本,實(shí)際生產(chǎn)肯定不能這么來(lái)的,根據(jù)大佬的建議一般來(lái)說(shuō)這部署應(yīng)該在docker環(huán)境配置,并且權(quán)限配置也很重要,而且runner機(jī)器和生產(chǎn)代碼機(jī)器應(yīng)該獨(dú)立。

好了,前端自動(dòng)部署,這個(gè)聽(tīng)起來(lái)如此高大上的東西是啥叻,我們?yōu)槭裁葱枰?,?duì)于眾javaer來(lái)說(shuō)jenkins肯定是不陌生的,這個(gè)原理頗為相似,但配置起來(lái)卻簡(jiǎn)單的多(那不然我就寫(xiě)不了這個(gè)文章了),我們目前希望能夠?qū)崿F(xiàn):

本地代碼推到master? => 觸發(fā)鉤子服務(wù)器自動(dòng)執(zhí)行腳本? => 拉代碼,自動(dòng)裝依賴,打包,編譯,上線

好了,確保你擁有環(huán)境清單里面的2,3,當(dāng)然沒(méi)有也沒(méi)關(guān)系,慢慢折騰嘛......

1,第一步準(zhǔn)備你的服務(wù)器公鑰

如果你有的話它應(yīng)該在 ~/.ssh目錄下的id_rsa.pub,沒(méi)有的話你可以創(chuàng)建一個(gè)

ssh-keygen -t rsa -C "youremail@example.com"

然后去gitlab setting的ssh key那里添加一下,這里是為了方便服務(wù)端去拉取git倉(cāng)庫(kù)代碼,也是我們搞事情的關(guān)鍵。

2,在服務(wù)端安裝gitlab runner

移除舊版本倉(cāng)庫(kù)(如果你之前搞過(guò)這個(gè),如果沒(méi)有,這步可以忽略):

sudo rm /etc/yum.repos.d/runner_gitlab-ci-multi-runner.repo

添加 GitLab's 官方倉(cāng)庫(kù):

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

下載最新版 GitLab Runner:

sudo yum install gitlab-runner

3,注冊(cè)runner

我們需要在這里和gitlab建立連接,命令行敲入

sudo gitlab-runner register


// 注冊(cè) gitlab-ci-multi-runner


sudo gitlab-ci-multi-runner register

出來(lái)一系列對(duì)話如下

# 填寫(xiě)gitlab ci地址(見(jiàn)圖1)

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

我這里用的是gitlab的庫(kù)當(dāng)然就是https://gitlab.com/啦,參數(shù)可看圖1

------------------------------------------------------------

輸入您獲得的注冊(cè)Runner的令牌:(見(jiàn)圖1)

Please enter the gitlab-ci token for this runner

token,圖一的位置有

------------------------------------------------------------

# 輸入Runner的描述,你可以稍后在GitLab的UI中進(jìn)行更改:

Please enter the gitlab-ci description for this runner[hostame]

my-runner (如果不是實(shí)際生產(chǎn),隨便寫(xiě),只是標(biāo)識(shí)作用)

------------------------------------------------------------

# 輸入與Runner關(guān)聯(lián)的標(biāo)簽,稍后可以在GitLab的UI中進(jìn)行更改:

Please enter the gitlab-ci tagsforthisrunner (comma separated):

xxx(這里不填也行)

------------------------------------------------------------

選擇Runner是否應(yīng)該選擇沒(méi)有標(biāo)簽的作業(yè),可以稍后在GitLab的UI中進(jìn)行更改(默認(rèn)為false):

Whether to run untagged jobs [true/false]:

[false]:true (暫時(shí)自己玩的話,可以直接空格調(diào)過(guò))

------------------------------------------------------------

選擇是否將Runner鎖定到當(dāng)前項(xiàng)目,稍后可以在GitLab的UI中進(jìn)行更改。

Runner特定時(shí)有用(默認(rèn)為true):

Whether to lock Runner to current project [true/false]:

[true]:true (暫時(shí)自己玩的話/不知道干啥用的,可以直接空格調(diào)過(guò))

------------------------------------------------------------

# 輸入Runner執(zhí)行者:Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell

shell(這里我們用較簡(jiǎn)單的shell命令來(lái)玩先)

步驟1,2信息可在gitalb -setting -ci(見(jiàn)圖1)里面找到相關(guān)信息

圖1

完成注冊(cè)后我們的gitlab runner應(yīng)該會(huì)被安排在/home/gitlab-runner 目錄,至少我的是這樣的。隨后我們需要給gitlab-runner文件夾賦予權(quán)限,否則很有可能在跑runner的時(shí)候報(bào)permission denied,操作如下

sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner

sudo chmod -R 777 /home/gitlab-runner

注意這里有個(gè)坑:遠(yuǎn)端拉下來(lái)的代碼文件很可能在linxu下沒(méi)有執(zhí)行權(quán)限,我們可能會(huì)遇到permission denied的情況,這時(shí)候需要手動(dòng)加權(quán)限 sudo chmod -R 777 /project_name ,然后使項(xiàng)目中的文件都可讀寫(xiě);再進(jìn)行一個(gè)無(wú)關(guān)的修改,提交到遠(yuǎn)端分支,這樣以后clone或者fetch下來(lái)的項(xiàng)目都是可讀寫(xiě)的了。

一頓操作之后如果發(fā)現(xiàn)gitlab setting runner左邊(例圖2)這里有一個(gè)綠點(diǎn)證明我們剛剛掛載成功了,如果是紅點(diǎn)和黑點(diǎn),可能需要手動(dòng)啟動(dòng)runner一下

sudo gitlab-ci-multi-runner start

圖2

4,編寫(xiě)一個(gè)簡(jiǎn)單shell腳本去操作我們的前端文件

因?yàn)槲覙O少接觸shell,所以這里也是參考其他大佬的簡(jiǎn)單寫(xiě)法,因?yàn)槲业那岸宋募?www/wwwroot/下,所以這里執(zhí)行的操作就是去這個(gè)目錄自動(dòng)拉代碼并且編譯,然后把這個(gè)文件放到/usr/local/bin/ ,放這里只是方便全局執(zhí)行,其實(shí)也可能用其它方式去調(diào)用,任君選擇,注意這玩意沒(méi)后綴。

注:這里只是簡(jiǎn)單演示其基本原理,作為實(shí)際生產(chǎn)的ci,我們其實(shí)應(yīng)該編譯目錄和線上目錄是分開(kāi)的,專門(mén)有一份文件進(jìn)行這些拉/裝/編/合的操作,最后進(jìn)行替換才能減少用戶被影響的時(shí)間,如果真的像如下這樣搞,那用戶等編譯白屏這個(gè)過(guò)程2,3分鐘,豈不日了狗。

deploy

# echo "更新代碼...."

cd /root/../www/wwwroot/項(xiàng)目目錄/

git pull

# build

echo "正在構(gòu)建..."

npm install

npm run build

echo "構(gòu)建成功...."


5,我們還需要一份.gitlab-ci.yml(這是建立連接的關(guān)鍵)

我們的項(xiàng)目一級(jí)目錄添加一個(gè).gitlab-ci.yml,里面內(nèi)容大概就是我們r(jià)unner定義的,意思是在我們master分支有變動(dòng)時(shí),觸發(fā)鉤子自動(dòng)執(zhí)行deploy腳本

https://gitlab.com/szdubinbin1/tryci/blob/master/.gitlab-ci.yml

stages:

? - deploy

deploy:

? ? stage: deploy

? ? script:

? ? ? - deploy

? ? only:

? ? ? - master

? ? tags:

? ? ? - my-runner


最后,測(cè)試一下

當(dāng)我們的master代碼發(fā)生變化(因?yàn)槲覒?,所以我用的是create-react-app腳手架做的測(cè)試),gitlab項(xiàng)目的ci/cd這里就可以看到我們執(zhí)行的runner(圖3)


圖3

passed就是成功了,當(dāng)然,光看這里是不行的,如果拉取git代碼失敗,它還是提示passed,原因猜測(cè)可能是它監(jiān)測(cè)到shell腳本跑完就覺(jué)得ok的,這里還需要看一下jobs

我們可以發(fā)現(xiàn)在jobs(圖4)它會(huì)反饋我們整個(gè)shell腳本、包括拉代碼/裝依賴/編譯打包的過(guò)程,如果如下,具體項(xiàng)目可能不同,我這個(gè)是react,理論上vue打包成功也差不多這樣,這時(shí)候我們刷新自己的項(xiàng)目地址就會(huì)發(fā)現(xiàn)修改生效了。

圖4

1,跑腳本的時(shí)候,npm install可能會(huì)說(shuō)權(quán)限不夠,這時(shí)候只能去修改項(xiàng)目目錄的權(quán)限

2,跑腳本的時(shí)候,git說(shuō)沒(méi)有ssh key,原因是我們剛開(kāi)始添加的是root的ssh key ,gitlab runner可能用不了,解決方案:切到gitlab runner用戶去添加一個(gè)ssh key

命令:su gitlab-runner? => 添加ssh key

因?yàn)楣臼褂眠@個(gè)方案,不過(guò)當(dāng)然比我這個(gè)高級(jí)的太多,我們重在實(shí)踐了解一下前端自動(dòng)化部署的大概流程,說(shuō)不定哪天這玩意真的需要我們自己搭呢?折騰了這玩意一天,有一些莫名其妙的坑,不過(guò)好在都算解決了,真的感覺(jué)這玩意太高效率了,以后自己做項(xiàng)目就不用去服務(wù)器拉代碼了。

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

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

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