最近在項(xiàng)目中想用一下gitlab-ci
(gitlab continuous integration持續(xù)集成)來對項(xiàng)目進(jìn)行自動化部署揖铜,這篇文章會提到自己所踩過一些坑(其實(shí)也不算坑刁赦,只是自己之前對這塊對了解為零而已)初橘。算是自己做對筆記潮梯,也希望能幫組到剛開始玩這個(gè)到小伙伴~~~
????其實(shí)能啃動官方的因?yàn)槲臋n也是挺簡單的gitlab-ci官方文檔
原理步驟:
??原理:簡單說就是我們在push
完代碼之后靡羡,想讓我們的代碼自動進(jìn)行構(gòu)建(包括編譯贱鄙,發(fā)布翁都,自動化測試)),那由誰來執(zhí)行這個(gè)過程呢寒砖?
答:用gitlab-runner
來執(zhí)行
實(shí)踐
??步驟:只需做兩件事情
????1道批、添加 .gitlab-ci.yml在項(xiàng)目的根目錄(會自動觸發(fā)Pipelines)
????2、配置一個(gè)Runner
????????在這之前你首先需要知道它有兩個(gè)東西來支撐:
1入撒、gitlab-ci server :負(fù)責(zé)調(diào)度、觸發(fā)Runner,以及獲取返回結(jié)果
2椭岩、gitlab-ci-runner:負(fù)責(zé)來跑自動化CI的一個(gè)宿主機(jī)子
開始
??1.直接在你的項(xiàng)目根目錄添加一個(gè).gitlab-ci.yml
文件茅逮,至于里面具體怎么配置可以看官方解釋更好,gitlab-ci
??2.配置runner(mac版本)
????2.1 使用Homebrew 安裝gitlab-runner(Homebrew是mac的一個(gè)安裝工具)
brew install gitlab-runner
看過一些文章會告訴你接著執(zhí)行gitlab-runner install
,但是先不要執(zhí)行這個(gè)判哥,這個(gè)不是安裝gitlab-runner献雅,而是service的指令
????2.2 注冊runner
打開你的項(xiàng)目(需要maintainer權(quán)限):settings->CI/CD,選擇Runners settings,如圖
記住圖二所標(biāo)注的1.url ?? 2.token
如果你要注冊一個(gè)
shared Runner
共享runner,哪你就需要擁有管理員權(quán)限塌计,如圖挺身,找到庫的url
和token
然后執(zhí)行:
gitlab-runner register
到這里 你看你的gitlab的runner設(shè)置里面就有一個(gè)runner了 ,如圖:
- url:私有g(shù)it的路徑
- token:項(xiàng)目的token锌仅,用于關(guān)聯(lián)runner和項(xiàng)目
- name:runner的名字章钾,用于區(qū)分runner
- tags:用于匹配任務(wù)(jobs)和執(zhí)行任務(wù)的設(shè)備(runners)
- executor:執(zhí)行環(huán)境
image.png
注意:如果你設(shè)置了Can run untagged jobs
為No,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能運(yùn)行對應(yīng)的runner,否則你任務(wù)可能一直在pending狀態(tài)热芹,找不到runner執(zhí)行贱傀。
未指定runner時(shí),如圖1伊脓,圖2:
圖1
圖2
??注意:使用webpack打包打時(shí)候府寒,別使用
webpack-bundle-analyzer依賴關(guān)系可視化這個(gè)插件,這會導(dǎo)致runner接收不到結(jié)束狀態(tài),不會進(jìn)行下一步
指定runner如圖:
????2.3 install & start service
前面我已經(jīng)提到過,先不用執(zhí)行g(shù)itlab-runner install≈晟Γ現(xiàn)在該它上場了
runner作為等待被派發(fā)任務(wù)的設(shè)備剖淀,如果只能通過run sudo gitlab-runner run
來前臺執(zhí)行就太蠢了。gitlab-runner也提供了service纤房,用來后臺響應(yīng)git服務(wù)器的任務(wù)分發(fā)纵隔。
gitlab-runner install
gitlab-runner start
注意:查看當(dāng)前runner的狀態(tài)可用
gitlab-runner status
查看,如圖:
image.png
如果你用gitlab-runner servcie,那它會隨著機(jī)器自己啟動,不用自己去再啟動帆卓。建議巨朦,將runner部署在一臺24小時(shí)不關(guān)機(jī)的服務(wù)器上。
接下來剑令,使用ssh免登錄的方式使用scp將本地文件上傳到遠(yuǎn)程的linux服務(wù)器
ssh登錄Linux通常有兩種方法:用戶名密碼登錄糊啡、用戶名公鑰登錄;使用用戶名密碼登錄每次都要輸入密碼吁津,相當(dāng)麻煩棚蓄,而使用用戶名公鑰登錄則可以避免這個(gè)問題。
1碍脏、本地生成公鑰和私鑰
ssh-keygen -t rsa -C 'your email@domain.com'
#-t 指定密鑰類型梭依,默認(rèn)即 rsa ,可以省略
#-C 設(shè)置注釋文字典尾,比如你的郵箱役拴,可以省略
生成過程中會提示輸入密碼兩次,如果不想在使用公鑰的時(shí)候輸入密碼钾埂,可以回車跳過河闰;
密鑰默認(rèn)保存位置在 ~/.ssh 目錄下,打開后會看到私鑰文件 id_rsa 和公鑰文件 id_rsa.pub褥紫;
cd ~/.ssh #切換到ssh下
ls #查看ssh目錄下的文件 id_rsa.pub公鑰 id_rsa私鑰
2.復(fù)制公鑰至服務(wù)器
使用 scp 命令將本地的公鑰文件 id_rsa.pub 復(fù)制到需要連接的Linux服務(wù)器:
scp ~/.ssh/id_rsa.pub <用戶名>@<Linux的ip地址>:/home/id_rsa.pub
/* 如:scp ~/.ssh/id_rsa.pub root@172.29.213.23:/home/id_rsa.pub */
如果修改了ssh默認(rèn)連接端口的話姜性,需要加上端口信息:
scp -P <端口號> ~/.ssh/id_rsa.pub <用戶名>@<Linux的ip地址>:/home/id_rsa.pub
登錄Linux服務(wù)器,把公鑰追加到服務(wù)器ssh認(rèn)證文件中:
cat /home/id_rsa.pub >> ~/.ssh/authorized_keys
這時(shí)候在本地終端中使用用戶名和ip登錄就不需要密碼了:
ssh <用戶名>@<Linux服務(wù)器ip>
// 如: ssh root@172.29.213.21
如果修改了ssh默認(rèn)連接端口的話髓考,需要加上端口信息:
ssh -p <端口號> <用戶名>@<ip地址>
3.使用scp 上傳文件到linux服務(wù)器指定目錄
scp -r ./dist "root@172.19.213.22:/opt/war/zhzg-mobile"
將dist目錄上傳到服務(wù)器到/opt/war/zhzg-mobile目錄下
然后將上面到指令放到gitlab-ci.yml
來執(zhí)行部念,預(yù)防后期操作較多,所以我沒有直接將上面指令寫到script
氨菇,而是使用了一個(gè).sh文件來執(zhí)行上面到指令,如圖: