溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

發(fā)布時(shí)間:2020-08-11 18:49:02 來源:ITPUB博客 閱讀:160 作者:JFrog杰蛙科技 欄目:開發(fā)技術(shù)

       Jenkins已經(jīng)成為大量公司最常用的一種持續(xù)集成工具了,但是目前pipeline的普及程度可能依然低于30%,大量的團(tuán)隊(duì)依然使用自由風(fēng)格這種笨重的方式,給統(tǒng)一構(gòu)建過程、構(gòu)建集中管理帶來極大的不便。筆者通過下面的18個(gè)問題來講解一下為什么企業(yè)級持續(xù)集成服務(wù)需要使用pipeline的構(gòu)建方式。

      

一、Jenkins2.0的最大改變是什么?

很多人認(rèn)為jenkins2.0的最大改變是增加了pipeline,實(shí)際上pipeline在Jenkins1.0中已經(jīng)有了這個(gè)概念,而jenkins2.0中最大的改變應(yīng)該是pipeline as code,即以代碼的方式描述pipeline。

二、Pipeline由誰來編寫,由誰維護(hù)?pipeline統(tǒng)一管理的優(yōu)勢?

由于pipeline編寫需要代碼能力 ,并且pipeline的中執(zhí)行步驟直接影響了最后構(gòu)建產(chǎn)物的質(zhì)量,所以建議pipeline需要由持續(xù)集成服務(wù)部門統(tǒng)一編寫、統(tǒng)一管理。此持續(xù)集成服務(wù)部門可以由工程效能團(tuán)隊(duì)、測試團(tuán)隊(duì)、ci團(tuán)隊(duì)等兼任。編寫好的pipeline需要標(biāo)記模版的使用方法和作用,需要相關(guān)的文檔或者json串記錄模版的這些屬性,那么業(yè)務(wù)部門就可以自助的使用這些模版 ,并在無形之間執(zhí)行了我們在模版中設(shè)置的一些質(zhì)量掃描測試的工作,并收集回了整個(gè)軟件生命周期的元數(shù)據(jù),用于我們對業(yè)務(wù)的質(zhì)量進(jìn)行評判。

三、Pipeline最佳管理方式?

由統(tǒng)一的持續(xù)集成服務(wù)部門編寫pipeline的模版和所需的類庫,將這些模版和類庫存放到gitlab等源碼倉庫中統(tǒng)一進(jìn)行版本控制管理。并將源碼地址配置到j(luò)enkins的Share Library的功能中,業(yè)務(wù)開發(fā)人員如需Jenkins進(jìn)行構(gòu)建,只需傳遞自己所需的參數(shù),調(diào)用持續(xù)集成服務(wù)部門已經(jīng)寫好的library,就可以自行設(shè)置構(gòu)建任務(wù)了。

Git倉庫保存流水線模版:

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

Pipeline 中引用模版:

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

四、腳本式pipeline和聲明式pipeline如何選擇?

聲明式pipeline比較簡單,也是Blue Ocean支持的語法格式,但此種pipeline在jenkins2.5之后才支持,成熟度有待發(fā)展,是官方推薦的方式。

Jenkins2.0最早支持 的pipeline,如果對Groovy語法很熟悉,可選擇腳本式pipeline,可以實(shí)現(xiàn)更復(fù)雜的邏輯。


五、不會(huì)pipeline的語法怎么辦?

Jenkins2.0中提供了流水線語法查詢的功能,可以自動(dòng)生成流水線代碼片斷,直接拷貝粘貼就可以

  打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

六、Pipeline中要涉及的基礎(chǔ)工具鏈包括哪些?

Pipeline一般的應(yīng)用是來做集成構(gòu)建的,也就是把源碼打包成制品,所以pipeline中涉及的最基礎(chǔ)的工具一定是源碼倉庫和制品倉庫,以及構(gòu)建過程中使用的每種語言的打包工具。

源碼倉庫:用于管理源代碼,常用gitlab、github、svn等

制品倉庫:用于管理制品,常用Artifactory。

打包工具:如mvn、go、npm、docker等


七、Pipeline中涉及到的進(jìn)階工具鏈?

Jira:關(guān)聯(lián)需求信息

Sonarqube:代碼靜態(tài)掃描

Xray:制品漏洞掃描

JMeter:性能測試

Junit:單元測試

JaCoCo:代碼覆蓋率

Ansible,saltstack:發(fā)布


八、Pipeline中需要設(shè)置的質(zhì)量關(guān)卡包括什么?

質(zhì)量關(guān)卡,即構(gòu)建過程中的質(zhì)量門,為確保每一個(gè)版本都能高質(zhì)量發(fā)布,建議將以下指標(biāo)與部署包關(guān)聯(lián),作為整個(gè)pipeline構(gòu)建過程的質(zhì)量關(guān)卡,如果有未達(dá)到的情況,記錄并處理。關(guān)卡包括:

       代碼靜態(tài)掃描的issue數(shù)量

       80%以上的單元測試覆蓋率

       漏洞掃描的結(jié)果

       開源許可證掃描

       不同環(huán)境是否具備不可變基礎(chǔ)設(shè)施

       集成測試是否通過

       性能測試結(jié)果

       較高的接口測試覆蓋率

      

九、什么是一次構(gòu)建,多次部署?如何在pipeline中實(shí)踐?

DevOps成熟度標(biāo)準(zhǔn)中建議做到一次構(gòu)建,多次部署。目的是為了在測試環(huán)境測過的包可以在不改變?nèi)魏苇h(huán)境和依賴的情況下發(fā)布到生產(chǎn)線上。發(fā)布時(shí)重新打包往往會(huì)因?yàn)樵创a版本變更、基礎(chǔ)環(huán)境變更等因素導(dǎo)致發(fā)布事故。

最佳實(shí)踐是使用制品提升倉庫級別的方案,使用Artifactory可以用起promotion的屬性進(jìn)行制品提級。

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

十、如何在pipeline中設(shè)置構(gòu)建參數(shù)?

Jenkins支持參數(shù)化構(gòu)建,包括憑據(jù)參數(shù)、字符參數(shù)、密碼參數(shù)、布爾值參數(shù)、文件參數(shù)、文本參數(shù)、運(yùn)行時(shí)參數(shù)、選項(xiàng)參數(shù)等。在pipeline中設(shè)置方法可以直接在片斷生成器中生成。(語法獲取可以使用片段生成器,搜properties)

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問 打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

十一、如何在pipeline中進(jìn)行并行構(gòu)建任務(wù)?

Jenkins pipeline支持并行構(gòu)建任務(wù),解決多個(gè)環(huán)境進(jìn)行構(gòu)建,或多個(gè)環(huán)境進(jìn)行發(fā)布的場景。使用串行十分影響效率,采用并行方式,通常是將命令下發(fā)給不同的agent,節(jié)省構(gòu)建時(shí)間。(語法獲取可以使用片段生成器,搜parallel)

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問


十二、如何在pipeline中優(yōu)雅的使用密文?

Pipeline 中經(jīng)常涉及到這樣一種場景,需要調(diào)用其他系統(tǒng)的api,難免會(huì)使用到一些key或者密碼 ,但是這些信息直接明文寫到pipeline中非常不優(yōu)雅,并且存在很大的安全隱患,所以在我們不希望展示這些key的場景下,可以使用Jenkins的憑證特性,解決這種問題 。(語法獲取可以使用片段生成器,搜withCredentials)

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

十三、如何在pipeline中設(shè)置定時(shí)啟動(dòng)job?

某些特定場景下,如每天凌晨需要對項(xiàng)目進(jìn)行一次clean的全量構(gòu)建,占用的時(shí)間和資源較多,我們可以使用Jenkins的構(gòu)建觸發(fā)器功能觸發(fā)定時(shí)任務(wù)進(jìn)行構(gòu)建。(語法獲取可以使用片段生成器,搜properties)

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問



十四、如何在pipeline中設(shè)置通過輪詢代碼倉庫啟動(dòng)job?

此觸發(fā)方式使用的較少,最佳實(shí)踐以webhook的方式觸發(fā)構(gòu)建更方便,但是在少量特殊場景,如每天需要構(gòu)建,但是版本不發(fā)生變化時(shí)不構(gòu)建可以應(yīng)用此觸發(fā)器


打造企業(yè)級pipeline服務(wù)的18個(gè)疑問


十五、如何在pipeline中設(shè)置通過其他job完成觸發(fā)啟動(dòng)job?

在集成測試的時(shí)候需要大量的此類操作,公共組件構(gòu)建了最新的版本要同時(shí)觸發(fā)所有依賴他的構(gòu)建項(xiàng)目進(jìn)行構(gòu)建,確保此版本能正常被業(yè)務(wù)應(yīng)用使用。

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問


十六、如何在pipeline中設(shè)置通過git的webhook觸發(fā)啟動(dòng)job?

通過Git的鉤子(webhook)功能觸發(fā)Jenkins構(gòu)建任務(wù),這種構(gòu)建模式比較常見,DevOps成熟度標(biāo)準(zhǔn)中也把這一條當(dāng)作三級評估的準(zhǔn)則,是否每一次提交代碼都能觸發(fā)完整的構(gòu)建過程,決定了我們持續(xù)集成的速度和效率。

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

十七、如何將pipeline與流程審批系統(tǒng)對接?

為實(shí)現(xiàn)需要人工校驗(yàn)是否繼續(xù)進(jìn)行后續(xù)流程,對接審批流程等操作,Jenkins支持了構(gòu)建等待的功能,可以在構(gòu)建過程中暫停任務(wù),等待下一步信號。(語法獲取可以使用片段生成器,搜input)

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

打造企業(yè)級pipeline服務(wù)的18個(gè)疑問

十八、什么情況下需要使用多分支pipeline?

在實(shí)際的項(xiàng)目中,往往需要多分支同時(shí)進(jìn)行開發(fā),如果每一個(gè)分支都創(chuàng)建一個(gè)jenkins項(xiàng)目 ,管理起來非常不方便。這種場景下需要使用多分支pipeline。常使用when參數(shù)來判斷分支。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI