新聞中心
Gitlab CI 是一個(gè)功能非常強(qiáng)大的持續(xù)集成系統(tǒng),有很多不同的功能,而且每次發(fā)布都會(huì)增加新的功能。它的技術(shù)文檔也很豐富,但是對那些要在已經(jīng)配置好的 Gitlab 上使用它的用戶來說,它缺乏一個(gè)一般性介紹。設(shè)計(jì)師或者測試人員是無需知道如何通過 Kubernetes 來實(shí)現(xiàn)自動(dòng)伸縮,也無需知道“鏡像”和“服務(wù)”之間的不同的。

在 fleetster, 我們搭建了自己的 Gitlab 實(shí)例,而且我們大量使用了 Gitlab CI。我們的設(shè)計(jì)師和測試人員也都在用它,也很喜歡用它,它的那些高級功能特別棒。
但是,他仍然需要知道什么是“管道”,知道如何查看部署到一個(gè)“環(huán)境”中的分支。因此,在本文中,我會(huì)盡可能覆蓋更多的功能,重點(diǎn)放在最終用戶應(yīng)該如何使用它們上;在過去的幾個(gè)月里,我向我們團(tuán)隊(duì)中的某些人包括開發(fā)者講解了這些功能:不是所有人都知道持續(xù)集成(Continuous Integration)(CI)是個(gè)什么東西,也不是所有人都用過 Gitlab CI。
如果你想了解為什么持續(xù)集成那么重要,我建議閱讀一下 這篇文章,至于為什么要選擇 Gitlab CI 呢,你可以去看看 Gitlab.com 上的說明。
簡介
開發(fā)者保存更改代碼的動(dòng)作叫做一次提交(commit)。然后他可以將這次提交推送(push)到 Gitlab 上,這樣可以其他開發(fā)者就可以復(fù)查(review)這些代碼了。
Gitlab CI 配置好后,Gitlab 也能對這個(gè)提交做出一些處理。該處理的工作由一個(gè)運(yùn)行器(runner)來執(zhí)行的。所謂運(yùn)行器基本上就是一臺(tái)服務(wù)器(也可以是其他的東西,比如你的 PC 機(jī),但我們可以簡單稱其為服務(wù)器)。這臺(tái)服務(wù)器執(zhí).gitlab-ci.yml 文件中指令,并將執(zhí)行結(jié)果返回給 Gitlab 本身,然后在 Gitlab 的圖形化界面上顯示出來。
開發(fā)者完成一項(xiàng)新功能的開發(fā)或完成一個(gè) bug 的修復(fù)后(這些動(dòng)作通常包含了多次的提交),就可以發(fā)起一個(gè)合并請求(merge request),團(tuán)隊(duì)其他成員則可以在這個(gè)合并請求中對代碼及其實(shí)現(xiàn)進(jìn)行評論(comment)。
我們隨后會(huì)看到,由于 Gitlab CI 提供的兩大特性,環(huán)境(environment) 與 制品(artifact),使得設(shè)計(jì)者和測試人員也能(而且真的需要)參與到這個(gè)過程中來,提供反饋以及改進(jìn)意見。
管道(pipeline)
每個(gè)推送到 Gitlab 的提交都會(huì)產(chǎn)生一個(gè)與該提交關(guān)聯(lián)的管道(pipeline)。若一次推送包含了多個(gè)提交,則管道與最后那個(gè)提交相關(guān)聯(lián)。管道就是一個(gè)分成不同階段(stage)的作業(yè)(job)的集合。
同一階段的所有作業(yè)會(huì)并發(fā)執(zhí)行(在有足夠運(yùn)行器的前提下),而下一階段則只會(huì)在上一階段所有作業(yè)都運(yùn)行并返回成功后才會(huì)開始。
只要有一個(gè)作業(yè)失敗了,整個(gè)管道就失敗了。不過我們后面會(huì)看到,這其中有一個(gè)例外:若某個(gè)作業(yè)被標(biāo)注成了手工運(yùn)行,那么即使失敗了也不會(huì)讓整個(gè)管道失敗。
階段則只是對批量的作業(yè)的一個(gè)邏輯上的劃分,若前一個(gè)階段執(zhí)行失敗了,則后一個(gè)執(zhí)行也沒什么意義了。比如我們可能有一個(gè)構(gòu)建(build)階段和一個(gè)部署(deploy)階段,在構(gòu)建階段運(yùn)行所有用于構(gòu)建應(yīng)用的作業(yè),而在部署階段,會(huì)部署構(gòu)建出來的應(yīng)用程序。而部署一個(gè)構(gòu)建失敗的東西是沒有什么意義的,不是嗎?
同一階段的作業(yè)之間不能有依賴關(guān)系,但它們可以依賴于前一階段的作業(yè)運(yùn)行結(jié)果。
讓我們來看一下 Gitlab 是如何展示階段與階段狀態(tài)的相關(guān)信息的。
Gitlab CI 基礎(chǔ)知識Gitlab CI 基礎(chǔ)知識
pipeline-overview
pipeline-status
作業(yè)(job)
作業(yè)就是運(yùn)行器要執(zhí)行的指令集合。你可以實(shí)時(shí)地看到作業(yè)的輸出結(jié)果,這樣開發(fā)者就能知道作業(yè)為什么失敗了。
作業(yè)可以是自動(dòng)執(zhí)行的,也就是當(dāng)推送提交后自動(dòng)開始執(zhí)行,也可以手工執(zhí)行。手工作業(yè)必須由某個(gè)人手工觸發(fā)。手工作業(yè)也有其獨(dú)特的作用,比如,實(shí)現(xiàn)自動(dòng)化部署,但只有在有人手工授權(quán)的情況下才能開始部署。這是限制哪些人可以運(yùn)行作業(yè)的一種方式,這樣只有信賴的人才能進(jìn)行部署,以繼續(xù)前面的實(shí)例。
作業(yè)也可以建構(gòu)出制品(artifacts)來以供用戶下載,比如可以構(gòu)建出一個(gè) APK 讓你來下載,然后在你的設(shè)備中進(jìn)行測試; 通過這種方式,設(shè)計(jì)者和測試人員都可以下載應(yīng)用并進(jìn)行測試,而無需開發(fā)人員的幫助。
除了生成制品外,作業(yè)也可以部署環(huán)境,通常這個(gè)環(huán)境可以通過 URL 訪問,讓用戶來測試對應(yīng)的提交。
做作業(yè)狀態(tài)與階段狀態(tài)是一樣的:實(shí)際上,階段的狀態(tài)就是繼承自作業(yè)的。
running-job
制品(Artifacts)
如前所述,作業(yè)能夠生成制品供用戶下載來測試。這個(gè)制品可以是任何東西,比如 Windows 上的應(yīng)用程序,PC 生成的圖片,甚至 Android 上的 APK。
那么,假設(shè)你是個(gè)設(shè)計(jì)師,被分配了一個(gè)合并請求:你需要驗(yàn)證新設(shè)計(jì)的實(shí)現(xiàn)!
要該怎么做呢?
你需要打開該合并請求,下載這個(gè)制品,如下圖所示。
每個(gè)管道從所有作業(yè)中搜集所有的制品,而且一個(gè)作業(yè)中可以有多個(gè)制品。當(dāng)你點(diǎn)擊下載按鈕時(shí),會(huì)有一個(gè)下拉框讓你選擇下載哪個(gè)制品。檢查之后你就可以評論這個(gè)合并請求了。
你也可以從沒有合并請求的管道中下載制品
我之所以關(guān)注合并請求是因?yàn)橥ǔ_@正是測試人員、設(shè)計(jì)師和相關(guān)人員開始工作的地方。
但是這并不意味著合并請求和管道就是綁死在一起的:雖然它們結(jié)合的很好,但兩者之間并沒有什么關(guān)系。
download-artifacts
環(huán)境(environment)
類似的,作業(yè)可以將某些東西部署到外部服務(wù)器上去,以便你可以通過合并請求本身訪問這些內(nèi)容。
如你所見,環(huán)境(environment)有一個(gè)名字和一個(gè)鏈接。只需點(diǎn)擊鏈接你就能夠轉(zhuǎn)至你的應(yīng)用的部署版本上去了(當(dāng)前,前提是配置是正確的)。
Gitlab 還有其他一些很酷的環(huán)境相關(guān)的特性,比如 監(jiān)控(monitoring),你可以通過點(diǎn)擊環(huán)境的名字來查看。
網(wǎng)站名稱:簡單介紹一下GitlabCI
路徑分享:http://fisionsoft.com.cn/article/djgjcii.html


咨詢
建站咨詢
