新聞中心
隨著軟件開發(fā)的迅速發(fā)展,持續(xù)集成(Continuous Integration,CI)的概念越來越被廣泛接受并應用于軟件開發(fā)過程中。在Linux上部署CI,可以幫助開發(fā)者自動化構建、測試、部署和發(fā)布軟件,進一步提高軟件開發(fā)的效率和效果。在本文中,我們將介紹一些關于Linux上CI的部署方式,并探討如何通過CI來解鎖高效持續(xù)交付能力。

在云陽等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網站設計、做網站 網站設計制作按需定制設計,公司網站建設,企業(yè)網站建設,品牌網站制作,成都營銷網站建設,成都外貿網站建設,云陽網站建設費用合理。
一、Linux上CI的部署方式
1.使用持續(xù)集成工具
持續(xù)集成工具是一種自動化集成開發(fā)的工具,可以通過將源代碼合并到同一個代碼庫中,然后進行構建和測試,檢查集成錯誤,使開發(fā)者可以更輕松地在多個平臺上測試和部署代碼。
目前,更流行的CI工具包括Jenkins、GitLab CI、Travis CI等。這些工具可以在Linux服務器上輕松地進行部署,提供了一個方便的流程來集成開發(fā)者的代碼。
2.使用容器化技術
容器化技術一直是構建、測試和部署軟件的熱門解決方案。它可以使軟件在不同環(huán)境下運行,無需依賴本地環(huán)境。
Docker是目前容器化技術中更受歡迎的解決方案之一。它可以在Linux服務器上運行,并且支持多種操作系統和編程語言。通過使用Docker,開發(fā)者可以輕松構建、測試和部署應用程序,同時簡化了軟件開發(fā)的流程和配置管理。
3.集成版本控制
版本控制使開發(fā)者能夠在開發(fā)過程中更輕松地跟蹤更改,并與其他開發(fā)者協作。集成版本控制(如Git)可以使開發(fā)者在不同的環(huán)境中工作,并確保所有的變更都被記錄下來。
集成版本控制工具可以與CI工具配合使用,實現代碼持續(xù)構建、測試和部署。GitLab是一個帶有集成CI/CD functions的開源版本控制系統,可以將所有的開發(fā)過程集成到一個平臺上,提供了一種自動化的CI解決方案。
4.自動化流程
自動化流程可以幫助開發(fā)者加快軟件開發(fā)過程中的測試、構建和部署,尤其是在代碼量龐大或需要頻繁更新時,手動處理這些任務可能非常耗時,自動化流程可以借助CI工具完成這些任務,較大程度地減少人力、時間和成本。
當然,自動化流程不僅僅是指CI工具,還可以包括腳本編寫、自動化測試等,這些工具都可以實現自動化流程,幫助開發(fā)者更快地部署和發(fā)布軟件。
二、解鎖高效持續(xù)交付能力
CI對于軟件開發(fā)來說,不僅僅是自動化構建、測試和部署,更是一種思維方式和一種實踐流程。通過CI實踐,可以幫助開發(fā)者實現數字化轉型,以更高效的方式構建和發(fā)布軟件。
下面是解鎖高效持續(xù)交付能力的一些重要點:
1.確保可靠的構建和測試
持續(xù)集成和持續(xù)交付是一種測試和部署軟件的方法,它可以確保軟件的質量和相互兼容性,并使其更容易部署、更容易運行、更容易維護。為了確保構建和測試的可靠性,在CI過程中,需要實現自動化成套的測試,并確保每個修改都經過測試,以提高軟件的質量和可靠性。
2.加速部署速度
CI可以將軟件開發(fā)過程中的構建、測試和部署自動化,并加速每次部署的速度,這在開發(fā)人員需要頻繁部署的情況下非常重要。通過自動化部署流程,可以減少錯誤,提高軟件的生產效率和交付速度。
3.更快的軟件發(fā)布
將交付作為開發(fā)流程的一部分,可以大大縮短軟件發(fā)布的周期,使開發(fā)人員能夠更快地發(fā)布產品和功能。CI可以幫助開發(fā)者自動化控制和管理軟件發(fā)布,并提高發(fā)布周期的可靠性和重復性。
4.提高團隊的生產力
CI可以幫助團隊節(jié)省時間和資源,降低成本,提高生產效率,并幫助開發(fā)者專注于更高層次的任務。通過CI的自動化流程,可以以更快的速度構建、測試和部署軟件,并提高團隊的整體效率。
CI已成為現代軟件開發(fā)流程的核心,可以使開發(fā)者更快地構建、測試、部署和發(fā)布軟件,提高軟件質量并降低成本。在Linux上部署CI,可以借助流行的工具和技術,使開發(fā)者能夠更容易地實現持續(xù)性開發(fā),進一步提高軟件交付的效率和產品質量。
相關問題拓展閱讀:
- 淺談對微服務的一些思考
- Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平臺
淺談對微服務的一些思考
兩年前,之一次真正接觸微服務的概念,但也只是簡單地進行了使用,當時技術棧主要是 Spring Boot,那時 Spring Cloud 也比較流行,但是由于各種原因,并沒有轉向這套(甚至用 zookeeper 實現了簡單的服務發(fā)現),理論上來說,用了 Spring Boot 再轉向 Spring Cloud 應該是很正常的事情。當時也認為 Spring Cloud 各種理念很高級,實現上也不錯,也有 Netflix 等之類的大公司背書,而且和 Spring 天然集成的,使用起來還是比較方便。當時可能覺得其他的 RPC 框架:如 Dubbo 和 Spring Cloud 相比簡直差了一個檔次,可能大家都認為 Spring Cloud 是未來。
從之一家公司離職后,去了另外一家公司,發(fā)現一個很奇怪的特點,這家公司的技術比較保守,基本還是十年前或者五六年前的技術架構困燃。記得之前看過一本書上說過,技術不與時俱進,那就相當于自取滅亡,特別是技術驅動型公司,如果一直停滯不前,那就相當于你拿幾十年前的武器和別人戰(zhàn)斗,那結果自然是必然的。為什么技術要與時俱進,不是因為有了新技術就要去使用它,而是因為新技術往往可以提高業(yè)務的運轉效率,同時也可以降低成本。不過在這個公司待了兩個月,還是覺得有可取的地方,之一點是對代碼質量的追求,由于業(yè)務的體量和特殊性(大概是億級),所以對代碼有較高的要求;第二點是對微服務整體架構的深入,雖然這個系統沒有上 Spring Cloud ,甚至 Spring Boot 都沒有,還是很老的一個架構,但其中微服務的思想已經有了,比如服務的拆分,服務的水平擴展,基于 Dubbo 的一些伍尺沖服務發(fā)現和治理,整體來說已經算是不錯了,但是也總在思考,感覺還是少了什么東西。
容器化和 CI/CD
后來又到了一家比較年輕活躍的公司,接觸到 Docker 的大規(guī)模使用以及 CI/CD,也是在這里,形成了整個對微服務完整生命周期的理解。 Docker 其實流行也很久了, 但是真正線上使用的并沒有那么多,最近隨著 Kubernetes( k8s ) 的流行,更多公司也開始關注起來。
首先為什么服務要容器化,之一點是不再依賴于運行環(huán)境,只要有 Docker 就可以跑起來,無論你是什么發(fā)行版的 Linux 系統,還是 Windows,Mac。這有點像 JVM,屏蔽底層的細節(jié),一次編寫,到處運行,用在容器上就是一次構建,到處運行。第二點是容器化可以更好的進行持續(xù)集成,由于之一點的緣故,部署一個服務容器將非??旖荩@更加適合目前 devops 的理念。
持續(xù)集成(Continuous Integration)簡稱 CI ,持續(xù)部署(Continuous Deployment)簡稱 CD,如果微服務不把 CI/CD 放在首位,那必然整個流程就是不流暢的。有些公司還是手動本地構建包,然后 上傳 到服務器上跑起來,進行這樣的人肉運維,人肉上線,要么考慮一下,是不是整個 CI/CD 有問題,或者根本就沒有 CI/CD 。其次 CI/CD 流程要做到每次構建自動跑單元測試,集成測試,以及 API 測試,UI 測試等等,這些流程也沒有自動化的話,也談不上完整的 CI/CD。如果沒有經過這些流程把包直接上傳到服務器,不出問題,那應該要燒柱香,拜拜佛。
云原生應用和服務網格
云原生應用遵循 Twelve-Factor ,云原生應用是為了解決傳統應用發(fā)布升級流程緩慢、架構復雜,可維護性差而提出的的一個思腔殲想,集中了 微服務,devops,云等多種思想。
云原生應用應用可以跑在任意一家云服務商上,也可以實現多家服務商同時使用,同時也支持公有云和私有云的混合部署,這只是它的一個特點,更多的特點還是集中在解決傳統應用面臨的問題,如灰度發(fā)布,不停機發(fā)布,A/B Test, 快速回滾,服務治理等。
服務網格(Service Mesh)是一個比較新的概念,但是核心思想并不新。Spring Cloud 以框架的形式侵入到程序中來解決微服務的各種問題,理論上來說,應該是效率更高,最靈活的一種做法。但是侵入性太強,而且只能 Spring 這套,異構語言的系統玩不轉。Service Mesh 從另外一個角度來解決這個問題,也就是 sidecar 和 proxy,這樣雖然性能上有些損失,但是擴展性卻是比較靈活的,將這些基礎能力(服務發(fā)現,服務治理,熔斷限流,監(jiān)控等)下放到基礎設施中,做到對應用程序透明,是一個不錯的進步。寫業(yè)務邏輯不需要再去和這些東西糾結,代碼邏輯也變得十分明朗。同時這樣也解決了異構語言系統的問題,無論什么語言,都是可以完美的工作在一起,簡直是一個完美世界。但是但是但是 Service Mesh 由于還比較新,目前還不能進行生產環(huán)境使用,就拿目前更流行的 Istio 來說,目前只發(fā)布了 0.8 版本,還不能實際使用,估計 1.0 也不行,可能得 1.2 才推薦生產,所以現在就面臨一個困境,Service Mesh 是一個好東西,但是我們卻用不了,嗚呼哀哉。
Spring Cloud 和 Service Mesh
首先兩者解決問題的方式不一樣,Spring Cloud 是直接的方式,Service Mesh 是委婉的方式,這可能會造就兩者之后的命運。如果目前已經上了 Spring Cloud 或者其他的,系統已經具有基礎的服務治理能力,先不要考慮 Service Mesh ,要先去考慮容器化和 CI/CD ;如果沒有太多的 歷史 負擔,則是可以考慮。
總結
技術發(fā)展太快,不能停滯不前,也不能盲目追風。當年的 SSH 也只剩下了 Spring,可是有人說 Spring 只能一個季節(jié)用,但是 Service Mesh 整年都可以用,好像很有道理。最后,路漫漫而修遠兮,吾將上下而求索。
Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平臺
上帝借由各種途徑使人變得孤獨,好讓我們可以走向自己。 ——赫爾曼·黑塞《德米安》
CI即為 持續(xù)集成(Continue Integration,簡稱CI) ,用通俗的話講,就是 持續(xù)的整合版本庫代碼編譯后制作應用鏡像 。建立有效的持續(xù)集成環(huán)境可以減少開發(fā)過程中一些不必要的問題、 提高代碼質量、快速迭代 等,
Jenkins :基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持笑散續(xù)重復的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續(xù)集成變成可能。
Bamboo : 是一個企業(yè)級商用軟件,可以部署在大規(guī)模生產環(huán)境中。
CD即持續(xù)交付Continuous Delivery和持續(xù)部署Continuous Deployment,用通俗的話說,即可以持續(xù)的部署到生產環(huán)境給客戶使用,這里分為兩個階段,持續(xù)交付我理解為滿足上線條件兆皮的過程,但是沒有上線,持續(xù)部署,即為上線應用的過程
關于 CD環(huán)境 ,我們使用以前搭建好的 K8s集群 ,K8s集群可以實現應用的 健康 檢測,動態(tài)擴容,滾動更新 等優(yōu)點,關于K8s集群的搭建,小伙伴可以看看我的其他文章
拉取鏡像,啟動并設置開機自啟
配置docker加速器
GitLab 不多介紹。一個基于Git的版本控制平臺,,提供了Git倉庫管理、代碼審查、問題跟蹤、活動反饋和wiki,當然同時也提供了
切記:這里的端口要設置成80,要不push項目會提示沒有報錯,如果宿主機端口被占用,需要把這個端口騰出來
external_url ‘
gitlab_rails = ‘192.168.26.55’
gitlab_rails = 222
修改完配置文件之后。直接啟動容器
相關的git命令
下面我們要配置私有的docker鏡像倉庫,用到的機器為:
這里倉族升差庫我們選擇 harbor ,因為有web頁面,當然也可以使用 registry
首先需要設置selinux、防火墻
安裝并啟動docker并安裝docker-compose,關于docker-compose,這里不用了解太多,一個輕量的docker編排工具
解壓harbor 安裝包:harbor-offline-installer-v2.0.6.tgz,導入相關鏡像
修改配置文件
harbor.yml:設置IP和用戶名密碼
./prepare && ./install.sh
查看相關的鏡像
訪問測試
這里因為我們要在192.168.26.55(CI服務器)上push鏡像到192.168.26.56(私倉),所有需要修改CI服務器上的Docker配置。添加倉庫地址
修改后的配置文件
加載使其生效
CI機器簡單測試一下
push一個鏡像,可以在私倉的web頁面查看
鏡像jenkins拉取
這里為什么要改成 1000,是因為容器里是以 jenkins 用戶的身份去讀寫數據,而在容器里jenkins 的 uid 是 1000,
更換國內清華大學鏡像,Jenkins下載插件特別慢,更換國內的清華源的鏡像地址會快不少
” 替換為 ”
替換后查看
重啟docker,獲取登錄密匙
需要修改jenkins綁定的docker的啟動參數
, ExecStart=/usr/bin/dockerd -H -H –containerd=/run/containerd/containerd.sock
修改鏡像庫啟動參數后需要重啟docker
后面 gitlab 要和 jenkins 進行聯動,所以必須要需要對 jenkins 的安全做一些設置,依次點擊 系統管理-全局安全配置-授權策略,勾選”匿名用戶具有可讀權限”
添加 JVM 運行參數 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 運行跨站請求訪問
這里的話我們要通過jenkins上的kubectl客戶端連接k8s,所以我們需要安裝一個k8s的客戶端kubectl,下載k8s客戶端
然后拷貝kubeconfig 證書,k8s集群中查看證書位置,這里的證書是之前創(chuàng)建好的,小伙伴可以看看我之前的文章
命令測試沒有問題
我們要部署 Nginx 來運行 hexo 博客系統, hexo 編譯完后為一堆靜態(tài)文件,所以我們需要創(chuàng)建一個 svc 和一個 deploy ,使用 SVC 提供服務,使用 deploy 提供服務能力,使用 Nginx+hexo的靜態(tài)文件 構成的鏡像
這里我們先用一個Nginx鏡像來代替hexo博客的鏡像
查看deployments和pod
訪問測試沒有問題,之后我們配置好jenkins上的觸發(fā)器,直接替換就OK
我們通過 kubectl set 命令更新 deploy 的鏡像時,獲取的鏡像是通過私倉獲取的,所以需要在啟動參數添加私倉地址
這里所有的節(jié)點都需要設置后重啟docker
訪問jenkins,接下來才是重點,我們要的jenkins上配置整個CICD流程,從而實現自動化
下面我們編譯一下hexo,生成public的一個文件夾,然后上傳gitlab
linux 部署ci的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux 部署ci,Linux上CI的部署方式,解鎖高效持續(xù)交付能力,淺談對微服務的一些思考,Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平臺的信息別忘了在本站進行查找喔。
成都服務器租用選創(chuàng)新互聯,先試用再開通。
創(chuàng)新互聯(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。物理服務器托管租用:四川成都、綿陽、重慶、貴陽機房服務器托管租用。
本文題目:Linux上CI的部署方式,解鎖高效持續(xù)交付能力 (linux 部署ci)
分享鏈接:http://m.fisionsoft.com.cn/article/dhjdihp.html


咨詢
建站咨詢
