自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

部署流水線的通用法則

開(kāi)源
Jenkins開(kāi)源的特性,還有浩瀚如海的插件,學(xué)習(xí)門(mén)檻低等等,都讓其成為一個(gè)不錯(cuò)的選擇。至少可以在有限資源的條件下,針對(duì)項(xiàng)目中需要搭建少數(shù)的幾個(gè)流水線這樣的需求而言,Jenkins再合適不過(guò)了。

前言

近些年來(lái)Docker、 Kubernetes、 Helm、 云原生如火如荼,Jenkins 憑借開(kāi)源社區(qū)的貢獻(xiàn)以及類(lèi)似 CloudBees 團(tuán)隊(duì)的加持。緊跟技術(shù)發(fā)展趨勢(shì),產(chǎn)出了集成于 Docker、 Kubernetes、 Helm、AWS等各種工具插件,還有 Jenkins X,原來(lái)配置頁(yè)的 Manage Nodes 也"悄悄地"變成了 Manage Nodes and Clouds。 另一方面,自研能力不錯(cuò)的企業(yè),也紛紛基于 Jenkins API開(kāi)發(fā)一套 Devops CICD 平臺(tái),給 Jenkins那個(gè)"老頭"套上了一層年輕的外衣,效果也十分理想。

Jenkins開(kāi)源的特性,還有浩瀚如海的插件,學(xué)習(xí)門(mén)檻低等等,都讓其成為一個(gè)不錯(cuò)的選擇。至少可以在有限資源的條件下,針對(duì)項(xiàng)目中需要搭建少數(shù)的幾個(gè)流水線這樣的需求而言,Jenkins再合適不過(guò)了。

縱使作為一個(gè)新技術(shù)的愛(ài)好者,當(dāng)你用戶其他新的CI工具時(shí),也不妨回過(guò)頭來(lái)看一看這個(gè)“老頭”,其中包含的一些通用法則、思想會(huì)讓你明白如何才能搭建使用于某個(gè)項(xiàng)目易用、易擴(kuò)展、易維護(hù)的流水線。

提高代碼復(fù)用性之Shared Library

如果你為一個(gè)項(xiàng)目里的多個(gè)Code Repo寫(xiě)多個(gè)jenkinsfile,你八成會(huì)遇到多個(gè)不同流水線中有大量重復(fù)代碼的情況,尤其在服務(wù)眾多的微服務(wù)的項(xiàng)目當(dāng)中。很多時(shí)候?yàn)榱朔奖闶∈挛覀兌际侵苯訌?fù)制粘貼類(lèi)似的邏輯代碼到不同的jenkinsfile中去,但如果某一天你需要更改一個(gè)小小的命令,那你就要受點(diǎn)小罪了。

而Shared Library便是解決代碼重復(fù)的方法之一,只需根據(jù)流水線段落的合理劃分,將流水線邏輯重復(fù)或共通的部分進(jìn)行抽象和封裝,便可在所有的流水線中簡(jiǎn)單地引用這些共享庫(kù)下面的代碼,并可大大縮短jenkinsfile中的代碼行數(shù),也顯得更加易讀、易維護(hù)。

而后期之秀中的Azure Pipelines, Github Actions 似乎深知復(fù)用功能函數(shù)的好處,并將其常用的Tasks/Actions放置到了公共的Marketplace中。開(kāi)發(fā)者即可直接使用,也可以自行開(kāi)發(fā)后上傳到Marketplace中供更多人使用。使用者更是免于維護(hù)一個(gè)單獨(dú)的類(lèi)似于Jenkins Shared Libray的代碼倉(cāng)庫(kù),一舉多得。另外,云原生工具中的Tekton, 其中的Task也有類(lèi)似的實(shí)踐。

共享庫(kù)越來(lái)越大,調(diào)用關(guān)系越來(lái)越復(fù)雜時(shí),不得不考慮代碼質(zhì)量的問(wèn)題。那就需要測(cè)試代碼來(lái)保證質(zhì)量,如何對(duì)Shared Library進(jìn)行測(cè)試?當(dāng)然可以編寫(xiě)Jenkinsfile放到Jenkins中創(chuàng)建Job去運(yùn)行,跑一跑便知代碼是否有問(wèn)題。但無(wú)疑這種方法不太優(yōu)雅,推薦使用JenkinsPipelineUnit(一個(gè)共享庫(kù)單元測(cè)試的框架)。

模板化之 JTE

正如一套開(kāi)發(fā)框架一樣,目的是為了快速地搭建起一個(gè)標(biāo)準(zhǔn)化的許多項(xiàng)目,模板提供的功能也是如此:對(duì)于同一類(lèi)型的流水線而言,大多數(shù)的構(gòu)建過(guò)程均是一樣的,甚至連運(yùn)行的命令也是一模一樣,這樣的流水線 配置文件相似度自然也是非常的高。那么 Jenkins Templating Engine就是針對(duì)這樣的場(chǎng)景的一個(gè)非常好的解決方案。

例如,在微服務(wù)的大型項(xiàng)目中,往往一個(gè)系統(tǒng)是由數(shù)十個(gè)小的微服務(wù)組成的,而著數(shù)十個(gè)微服務(wù)均需要各自的CICD的流水線,來(lái)完成打包、部署的過(guò)程,彼此之間又是同一套開(kāi)發(fā)框架,所需要的構(gòu)建環(huán)境、工具、測(cè)試流程、發(fā)布策略等等均是一個(gè)模子刻出來(lái)的。

"人"如其名, Jenkins Templating Engine就是用來(lái)做流水線模板化的工具,簡(jiǎn)稱(chēng) JTE。從 JTE 主頁(yè)可看到誕生時(shí)間是2019年5月份,相當(dāng)年輕。針對(duì)不同類(lèi)型的項(xiàng)目,比如Maven、 Gradle來(lái)做一些模板化的規(guī)定,簡(jiǎn)單而言就是用來(lái)統(tǒng)一內(nèi)部流水線的Stage、Steps中的邏輯、參數(shù)等。

在完成上述代碼,以及安裝JTE插件、正確配置 Jenkins的前提下,在具體業(yè)務(wù)代碼中添加默認(rèn)文件pipeline_config.groovy之后,新建流水線時(shí)針對(duì) build configuration 選項(xiàng)去選擇Jenkins Templating Engine,即可完成流水線的搭建,只需要簡(jiǎn)簡(jiǎn)單單的2、3行。

而反觀 JTE 的優(yōu)勢(shì),便是以下三點(diǎn):

(來(lái)源于 https://www.jenkins.io/blog/2019/05/09/templating-engine/)

而去其他CICD工具中尋找一下,也可見(jiàn)到類(lèi)似實(shí)踐的身影。例如 Gocd 的Pipeline Templates, Azure Pipelines 的 templates。

集中管理之Job DSL

如果你正在經(jīng)歷一個(gè)微服務(wù)項(xiàng)目,Code Repo 數(shù)量眾多,而每個(gè)Repo都需要通過(guò)一個(gè)Jenkinsfile定義一個(gè)流水線。當(dāng)你面對(duì)幾十上百個(gè)Repo,分散地管理維護(hù)它們便些許繁瑣。Job DSL Plugin 允許使用DSL以編程方式創(chuàng)建項(xiàng)目,將作業(yè)創(chuàng)建的操作通過(guò)腳本實(shí)現(xiàn),使你能夠自動(dòng)化和標(biāo)準(zhǔn)化 Jenkins 配置。

這款插件不單單能夠創(chuàng)建各種類(lèi)型的Job(Maven jobs、Freestyle jobs、流水線 jobs...),還能創(chuàng)建 Folder、 Dashboard View、 List View等等。形象生動(dòng)的效果如下圖,“埋下一顆種子,收獲幾顆大樹(shù)”。

在代碼庫(kù)的目錄層級(jí)上,首先建議按照 Project 劃分,給每個(gè) Project 定義單獨(dú)的 Seed Job;其次將Job等的定義與邏輯實(shí)現(xiàn)隔離,這樣能確保 xxx.jenkinsfile 里的內(nèi)容的獨(dú)立性,且在采納Job DSL插件后,針對(duì)原先的 jenkinsfile 無(wú)需做很大幅度的修改,拿過(guò)來(lái)便可使用。

該工具無(wú)疑將Pipeline As Code的理念又進(jìn)化了一步,將流水線的創(chuàng)建過(guò)程也代碼化了。然后在 Jenkins 實(shí)踐中,如果想追求更多的配置代碼化,不妨看看 Jenkins Configuration as Code,簡(jiǎn)稱(chēng) JCasC。這個(gè)工具能完全將大部分的Jenkins的資源、配置代碼化,安裝插件、配置Github Server、管理憑證、新建任務(wù)等等都可通過(guò)文件完成,不需要在UI界面上做任何的操作。

后記

以上幾種思想在本文中都提供了對(duì)應(yīng)的一種實(shí)現(xiàn)方式,但遠(yuǎn)遠(yuǎn)不止于所提及的方法,當(dāng)然還有或多或少類(lèi)似的方法,但萬(wàn)變不離其宗。縱使今后有更多的CICD新工具的出現(xiàn),或許在一些小的地方上可以另辟蹊徑,但大體的解決方案也繞不開(kāi)已有的這些解決問(wèn)題的思想。例如在Azure Pipelines中, Templates的功能能提供類(lèi)似 Shared Library 和 JTE的功能,只是實(shí)現(xiàn)形式不同,核心思想?yún)s還是一致的。

具體使用還需要結(jié)合項(xiàng)目屬性、分支策略、發(fā)布策略、權(quán)限管理、服務(wù)器環(huán)境情況等多個(gè)方面綜合考慮,另外也有很多類(lèi)似于 Nightly Build 這種構(gòu)建策略值得我們借鑒?!皸l條道路通羅馬”,怎么省時(shí)、省力的達(dá)成我們最終的目標(biāo),以及達(dá)成之后如何維護(hù)好流水線,都值得好好思考與設(shè)計(jì)。

責(zé)任編輯:趙寧寧 來(lái)源: Thoughtworks洞見(jiàn)
相關(guān)推薦

2017-03-02 14:12:13

流水線代碼Clojure

2013-06-06 09:31:52

2017-02-28 15:40:30

Docker流水線Azure

2021-06-26 14:22:34

Tekton流水線Kubernetes

2022-07-18 06:05:28

Gitlab流水線

2017-02-28 16:00:45

DevOpsMarkdownreST

2023-05-10 15:08:00

Pipeline設(shè)計(jì)模式

2021-11-08 07:41:16

Go流水線編程

2024-01-07 12:47:35

Golang流水線設(shè)計(jì)模式

2021-12-24 08:02:48

GitLabCI模板庫(kù)流水線優(yōu)化

2023-08-18 10:24:52

GitLabCI 流水線

2024-04-03 09:55:56

代碼pipeline項(xiàng)目

2021-06-28 06:32:46

Tekton Kubernetes Clone

2021-06-18 05:48:02

Tekton DevopsKubernetes

2023-09-27 08:24:49

2021-04-13 06:15:37

開(kāi)源部署流水線Jenkins

2023-12-11 18:35:37

測(cè)試流水線自動(dòng)化

2021-01-05 08:39:51

容器前端流水線

2012-04-19 11:44:52

iPhone

2018-10-23 16:35:19

華為云
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)