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

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


咨詢
建站咨詢
