DevOps持續(xù)集成之Git、GitLab、GitLab CI篇
為什么要使用Git
分布式
分支管理
節(jié)省磁盤(pán)空間?
大家都在用(GitHub、Gitee、coding.net)

Git使用指南
Git 四個(gè)區(qū)域:
工作區(qū):就是你克隆項(xiàng)目到本地后,項(xiàng)目所在的 文件夾目錄。
暫存區(qū):用于存儲(chǔ)工作區(qū)中添加上來(lái)的變更(新 增、修改、刪除)的文件的地方。
本地倉(cāng)庫(kù):用于存儲(chǔ)本地工作區(qū)和暫存區(qū)提交上 來(lái)的變更(新增、修改、刪除)過(guò)的文件的地方。
遠(yuǎn)程倉(cāng)庫(kù):托管代碼的服務(wù)器,提供web服務(wù), 供大家方便地進(jìn)行下載,查看,提交和存儲(chǔ)。

Git基本工作流程:
在工作目錄中修改文件。
暫存文件,將文件的快照放入暫存區(qū)域。
提交更新,找到暫存區(qū)域的文件,將快照永久性 存儲(chǔ)到 Git 倉(cāng)庫(kù)目錄。

Git提交規(guī)范:
總體原則,從哪個(gè)分支checkout的代碼就合回那個(gè) 分支,避免分支合并混亂導(dǎo)致代碼錯(cuò)誤。
必須以mergerequest的方式合回主分支,并且有 開(kāi)發(fā)負(fù)責(zé)人對(duì)代碼review后才能合入。
當(dāng)合并發(fā)生沖突時(shí),必須解決完沖突才能提交代碼 以及合并分支。
分支命名盡量以功能點(diǎn)命名,比如 feature_accessdata,bugfix_dataquery。
Git分支管理最佳實(shí)踐:
單主干的分支實(shí)踐(Trunk-based development,TBD),Google和Facebook都使用這種方式。

Git分支管理最佳實(shí)踐:
Git-flow的分支實(shí)踐,是目前流傳最廣的git分支管理, 圍繞的核心概念是版本發(fā)布(release)。因此 Git- flow 適用于有較長(zhǎng)版本發(fā)布周期的項(xiàng)目。
Git-flow 流程中包含 5 類(lèi)分支,分別是 master、 develop、新功能分支(feature)、發(fā)布分支 (release)和 hotfix。

GitLab代碼管理

用GitLab-CI進(jìn)行持續(xù)集成
Gitlab-CI是什么??
gitlab-ci是CI/CD里面的一種。
CI/CD:
CI(Continuous integration)持續(xù)集成,是一種軟件開(kāi)發(fā)實(shí)踐, 每次代碼提交,都通過(guò)自動(dòng)化的構(gòu)建(包括編譯、發(fā)布、自動(dòng)測(cè)試)
CD(continuous deployment)持續(xù)部署是通過(guò)自動(dòng)化的構(gòu)建、 測(cè)試和部署來(lái)快速交付高質(zhì)量的產(chǎn)品。
gitlab-ci是從gitlab 8.0開(kāi)始,加入到gitlab中的,我們只需要在 項(xiàng)目中添加一個(gè).gitlab-ci.yml文件,并添加一個(gè)gitlab-runner, 即可完成我們的CI/CD操作了。

常見(jiàn)的CI/CD:?
jenkins?
github上的travis-ci?
Drone CI?
Gitlab-ci

Gitlab-CI需要了解下面三個(gè)概念:

前面講解了Gitlab-ci中的一些概念,那我們定義的這個(gè)構(gòu)建任務(wù)是運(yùn)行在哪里的呢?
我們需要先下載gitlab runner的工具,下載地址:https://docs.gitlab.com/runner/,然后我們能得到一個(gè)gitlab-runner可執(zhí)行文件,然后 執(zhí)行g(shù)itlab-runner register腳本。
?這個(gè)腳本需要下面幾個(gè)參數(shù):

基本寫(xiě)法:
我們?cè)诠こ汤锩鎰?chuàng)建.gitlab-ci.yml,最簡(jiǎn)單的寫(xiě)法如下: 這是一種類(lèi)似json的一種描述方法,如果沒(méi)了解過(guò)的可以搜索yaml進(jìn)行了解。
定義了一個(gè)個(gè)pipeline,里面有兩個(gè)stage,test和build。然后先執(zhí) 行build,再執(zhí)行test的構(gòu)建階段。build構(gòu)建階段是job2構(gòu)成,test 構(gòu)建階段由job1構(gòu)成。分別執(zhí)行對(duì)應(yīng)的script。?
更多的關(guān)鍵字及具體介紹查看官網(wǎng):? http://docs.gitlab.com/ce/ci/yaml/README.html

簡(jiǎn)單例子:
.gitlab-ci.yml構(gòu)建任務(wù)的定義文件中,描述了stage有 5個(gè)階段。
同時(shí)設(shè)置了全局的cache。Job only表示只有對(duì)應(yīng)的分 支才會(huì)觸發(fā)運(yùn)行對(duì)應(yīng)的Jobs。
install_deps:安裝依賴(lài)
test階段:運(yùn)行npmruntest
build階段:執(zhí)行build對(duì)應(yīng)的操作
deploy_test階段:使用pm2部署到測(cè)試服務(wù)器
deploy_production:部署到生產(chǎn)階段

以上簡(jiǎn)單介紹了Git、Git分支策略、GitLab及GitLab CI,關(guān)于GitLab在DevOps的更多玩法歡迎大家去實(shí)踐。
請(qǐng)關(guān)注微信公眾號(hào) 【DevOpsHub】,獲取更多關(guān)于DevOps研發(fā)運(yùn)維一體化的信息
