1. 程式人生 > >再見Jenkins,從Gitlab程式碼提交到k8s服務持續交付只需七毛三(走過路過不要錯過)

再見Jenkins,從Gitlab程式碼提交到k8s服務持續交付只需七毛三(走過路過不要錯過)

Gitlab runner 快速搭建CICD pipeline

 

背景

日常開發中,相信大家已經做了很多的自動化運維環境,用的最多的想必就是利用Jenkins實現程式碼提交到自動化測試再到自動化打包,部署全流水線
Jenkins在devops擔任了很重要的角色,但是另一方面相信目前大家的程式碼版本管理大多都是交給git來管理,在企業私有部署的大背景下,Gitlab由於豐富的外掛和細粒度更高的許可權控制被大家所採用。
如果只是把Gitlab作為程式碼版本管理,那就大大浪費他的附加價值,在Gitlab中自帶CICD功能,此功能就可完全代替Jenkins,這樣一來,我們就不必維護多套系統,簡化開發到運維的複雜度

實踐


由於gitlab資源消耗嚴重,本地沒有搭建,所以使用gitlab官方

第一步註冊gitlab賬戶(企業私有部署可忽略此步驟)

註冊地址:https://gitlab.com/

第二步建立專案並推送至gitlab倉庫

 

並在專案中加入支援Docker容器的Dockerfile檔案和支援觸發gitlab CICD功能的 .gitlab-ci.yml指令碼檔案(此檔案必須放在根目錄)
最後的目錄是這樣

 

 

這兩個檔案的內容大致是
Dockerfile

 

 

 

推送Gitlab後的目錄

 


第三步安裝gitlab Runner。

安裝就簡單幾步再不贅述,安裝教程(https://docs.gitlab.com/runner/install/windows.html),
由於使用的gitlab 非企業版官方,所以就只能用它提供的共享runner,企業私有部署的gitlab,一般管理員會給每個開發人員分配一個註冊令牌token用來與runner繫結
安裝runner時,將gitlab地址(不包含倉庫)和註冊令牌在需要填入的時填入即可授權此runner與Gitlab互動
Runner大致就是用來執行一系列指令碼的載體,當gitlab有程式碼提交,gitlab會通知與之對應的runner,麻煩runner幫他執行提前寫好的指令碼規則(runner可安裝支援一個專案也可共享出來支援多個專案),執行的每一步狀態會通知gitlab,gitlab會在CICD控制面板打印出來


第四步自動觸發CICD

只要當根目錄包含了.gitlab-ci.yml檔案的專案提交至Gitlab,就會自動觸發CICD,然後通知對應的Runner執行指令碼,並將狀態列印

 

點選每個JOb可看到內部執行的計劃和輸出,此處和jenkins流程類似

 

由於.gitlab-ci.yml檔案包含了推送映象到映象倉庫,此時我們開啟騰訊映象倉庫即可看見編譯打包上傳好的映象

 

 

此時有了映象,那我們就可以依靠此映象建立k8s叢集服務


第五步啟用雲廠商k8s容器編排服務

建立k8s服務的大致步驟為:

 

只要在雲廠商控制檯啟用對應步驟並配置即可實現一個k8s叢集的容器服務,此過程各平臺略有不同
由於考慮到騰訊雲k8s服務按量付費沒有最低餘額限制,阿里雲則需要100餘額的門檻,所以在騰訊雲充值了1.6元來進行實驗

 

騰訊雲各步驟文件:
建立叢集 :https://cloud.tencent.com/document/product/457/9091
映象倉庫 :https://cloud.tencent.com/document/product/457/9117
建立服務 :https://cloud.tencent.com/developer/article/1412348
以上步驟建立完畢可在應用中心服務一欄可看到當前正在執行的服務,此處我設定為Pod為2個,相當於此服務下兩個站點例項作為一個叢集

 

 

第六步建立映象觸發器

現在我們已經依靠gitlab的runner服務推送的映象建立了k8s容器服務
但每次提交映象都得人為去重置服務並選擇新的映象,這個重複乏味的勞動過程想必誰都不想去做,
這時候就要用到雲廠商提供的觸發器來操作這個重複的過程。
提前制定好觸發規則,例如匹配到某tag名稱或者建立時間,即自動進行拉取映象建立服務的過程

點選新增觸發器

 

 

這裡觸發規則選擇了只要有新版本就觸發,並且選擇被觸發的服務,映象提交,即更新服務拉取最新映象構建

 

測試

修改任意gitlab倉庫程式碼,提交,然後等構建完成後,進入騰訊雲的觸發器頁面
顯示觸發成功,此時服務已經使用了最新的docke映象版本

 

檢查一下賬戶餘額,發現還有0.87元。。。關閉叢集。。待下次繼續使用

以上是GItlab與騰訊雲實現程式碼提交到容器持續交付的過程,其他例如阿里雲流程也類似

這裡不得不誇讚一下騰訊雲,容器服務沒有最低消費限制,幾毛錢就能讓廣大群眾學習K8S容器服務,對開發者很友好。。強烈安利。。