GitLab与Jenkin 结合构建持续集成环境
目錄
1.持續集成概述運行及流程
1.1 CI/CD 介紹
1.2流程
1.3 Jenkins 概述
?1.4 GitLab 概述
1.5 項目部署方式
1.6集群和分布式
1.7持續集成系統的工作流程
總結:
1.持續集成概述運行及流程
1.1 CI/CD 介紹
把開發工作流程分為以下幾個階段:
編碼 → 構建 → 集成 → 測試 → 交付 → 部署
持續集成(Continuous Integration)、持續交付(Continuous Delivery)和持續部署(Continuous Deployment)有著不同的軟件自動化交付周期。
?概念:
持續集成(CI):
持續集成 (Continuous integation)可以頻繁的(一天多次)將代碼合并到主干源碼倉庫,并立刻進行構建、(單元)測試,根據測試結果可以確定新代碼和原代碼能否確定的集成在一起
好處有兩個:
1.快速發現錯誤,每完成一點開發,集成到主干,可快速發現錯誤,定位錯誤
2.防止分支發幅偏離主干,主干又在不斷更新,如不是經常集成會導致以后集成的難度變大
集成的目的:就是讓產品可以快速迭代,同時還能保存高質量。核心措施是,代碼集成到主干之前,必須通過自動化測試,只要又一個測試失敗,就不能集成。
持續交付:
?持續交付(Continuous delivery)指的是在持續集成的基礎上,將集成后的帶代碼部署到貼近真實生產環境的(類生產環境)中。
持續交付可以看作持續集成的下一步,強調的是,不管怎么更新,軟件是隨時隨地可以交付的。
持續部署:
持續部署(continuous deployment)是持續交付的下一步,指帶代碼通過評審以后。部署到生產環境。
持續部署的前提是能自動化完成測試、構建、部署等步驟,一般持續部署建立手動部署?
總的來說,CI/CD? 提供了一個優秀的 DevOps 環境,?很大的提高了開發運維的效率
1.2流程
1)提交:
開發者向代碼庫提交代碼
2)測試:
代碼倉庫對 commit 操作配置了鉤子(hook),只要提交代碼或合并進主干,就會通知jenkins 實現自動化測試
測試的幾種方式:
單元測試:針對函數或模塊的測試
集成測試:針對整體產品某個功能的測試又稱功能測試
端對端測試:從用戶界面直達數據庫的全鏈路測試
3)構建:
通過第一輪測試,代碼就可以合并進主干,就算可以交付了。
交付后,就先進行構建(build),再進入第二輪測試。所謂構建,指的是將源碼轉換為可以運行的實際代碼,比如安裝依賴,配置各種資源(樣式表、JS腳本、圖片)等等
4)測試(第二輪)
將 CI 測試后的代碼程序交付給測試人員進行全面測試 (類生產環境中測試)
第二輪是全面測試,單元測試和集成測試都會跑,有條件的話,也要做端對端測試。所有測試以自動化為主,少數無法自動化的測試用例,就要人工跑。
5)部署
測試成功,當前代碼就是一個可以直接部署的版本了。將這個版本的所有文件打包( tar filename.tar * )存檔,部署生產服務器。
生產服務器將打包文件,解包成本地的一個目錄,再將運行路徑的符號鏈接(symlink)指向這個目錄,然后重新啟動應用。這方面的部署工具有Ansible,Chef,Puppet等。
6)回滾
如當版本出現問題,回滾到上一個版本的構建,最簡單的方法就是修改一下符號鏈接,指向上一個版本的目錄。
1.3 Jenkins 概述
Jenkins 概述:是一個開源軟件項目,是基于Java開發的一種持續集成、交付、部署的基于web界面的平臺,用于自動化各種任務,包括構建、測試和部署軟件。
?Jenkins其實很早之前就有了,最近火起來的原因是,大家都在關注devops,關注如何來做CI/CD。Jenkins作為持續集成的工具,他其實只是一個平臺或者是一個大的框架,它的工作完全就是依靠插件,也就是說你想使用什么功能,你就找到什么樣的插件。
官方網址:Jenkins
?
?1.4 GitLab 概述
gitlab是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自托管的 Git 項目倉庫,可通過 Web界面進行訪問公開的或者私人項目。Ruby on Rails 是一個可以使你開發、部署、維護 web 應用程序變得簡單的框架。
?GitLab 擁有與Github 類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個文件歷史庫。它還提供一個代碼片段收集功能可以輕松實現代碼復用,便于日后有需要的時候進行查找。
注:gitlab-ce 社區版,gitlab-ee?企業版(收費)
官網:?The One DevOps Platform | GitLab
1.5 項目部署方式
項目部署方式分為 2 種:手動、自動部署。
手動部署:
自動化部署:
“自動化”的具體體現:向版本庫提交新的代碼后,應用服務器上自動部署,用戶或測試人員使用的馬上就是最新的應用程序
?
?構建上述集成環境可以把整個構建、部署過程自動化,很大程度上減輕工作量。對于程序員的日常開發來說不會造成任何額外負擔,自己把代碼提交上去之后,服務器上運行的馬上就是最新版本。
1.6集群和分布式
?通過此圖可以形象的解釋集群和分布式的含義:
單機結構中的全棧意思是:即做前端的 js、css、html等,又做后端的java 等
集群結構中的全棧意思是:同時又兩個或多個更多的人即做前端,又做后端
分布式的意思就是此圖所表示的:?將后端和前端分開,各做各的。
1.7持續集成系統的工作流程
這里是選擇 Gitlab作為 git server。Gitlab的功能和 github差不多,可以搭建私有的git server,提供非常強大的 web GUI,比如開發者互相review源代碼的時候就會很方便
系統的工作流程大概分為以下幾步:
1> 開發者將新版本push到git server (Gitlab)。
?2> Gitlab隨后觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)
?3> jenkins master結點將這個build任務分配給若干個注冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。
?4> 我們在build中要進行編譯,這里使用了分布式編譯器distcc來加快編譯速度。
?注:
?jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然后根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務
總結:
1)開發者向代碼倉庫提交代碼
2)在gitlab倉庫設置webhook鉤子,通知jenkins實現CI的自動化測試
3)將CI測試后的代碼程序交付給測試人員進行全面測試(類生產環境中測試)
4)將測試后沒問的項目部署到生成環境,如果有問題,就回滾到上一個穩定版本
總結
以上是生活随笔為你收集整理的GitLab与Jenkin 结合构建持续集成环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位处理器_32位和64位Window
- 下一篇: usaco4.4.1 Shuttle P