打造企業級pipeline服務的18個疑問

JFrog傑蛙科技發表於2019-12-18

       Jenkins已經成為大量公司最常用的一種持續整合工具了,但是目前pipeline的普及程度可能依然低於30%,大量的團隊依然使用自由風格這種笨重的方式,給統一構建過程、構建集中管理帶來極大的不便。筆者透過下面的18個問題來講解一下為什麼企業級持續整合服務需要使用pipeline的構建方式。

      

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

很多人認為jenkins2.0的最大改變是增加了pipeline,實際上pipeline在Jenkins1.0中已經有了這個概念,而jenkins2.0中最大的改變應該是pipeline as code,即以程式碼的方式描述pipeline。


二、Pipeline由誰來編寫,由誰維護?pipeline統一管理的優勢?

由於pipeline編寫需要程式碼能力 ,並且pipeline的中執行步驟直接影響了最後構建產物的質量,所以建議pipeline需要由持續整合服務部門統一編寫、統一管理。此持續整合服務部門可以由工程效能團隊、測試團隊、ci團隊等兼任。編寫好的pipeline需要標記模版的使用方法和作用,需要相關的文件或者json串記錄模版的這些屬性,那麼業務部門就可以自助的使用這些模版 ,並在無形之間執行了我們在模版中設定的一些質量掃描測試的工作,並收集回了整個軟體生命週期的後設資料,用於我們對業務的質量進行評判。


三、Pipeline最佳管理方式?

由統一的持續整合服務部門編寫pipeline的模版和所需的類庫,將這些模版和類庫存放到gitlab等原始碼倉庫中統一進行版本控制管理。並將原始碼地址配置到jenkins的Share Library的功能中,業務開發人員如需Jenkins進行構建,只需傳遞自己所需的引數,呼叫持續整合服務部門已經寫好的library,就可以自行設定構建任務了。

Git倉庫儲存流水線模版:

Pipeline 中引用模版:


四、指令碼式pipeline和宣告式pipeline如何選擇?

宣告式pipeline比較簡單,也是Blue Ocean支援的語法格式,但此種pipeline在jenkins2.5之後才支援,成熟度有待發展,是官方推薦的方式。

Jenkins2.0最早支援 的pipeline,如果對Groovy語法很熟悉,可選擇指令碼式pipeline,可以實現更復雜的邏輯。


五、不會pipeline的語法怎麼辦?

Jenkins2.0中提供了流水線語法查詢的功能,可以自動生成流水線程式碼片斷,直接複製貼上就可以

 


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

Pipeline一般的應用是來做整合構建的,也就是把原始碼打包成製品,所以pipeline中涉及的最基礎的工具一定是原始碼倉庫和製品倉庫,以及構建過程中使用的每種語言的打包工具。

原始碼倉庫:用於管理原始碼,常用gitlab、github、svn等

製品倉庫:用於管理製品,常用Artifactory。

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


七、Pipeline中涉及到的進階工具鏈?

Jira:關聯需求資訊

Sonarqube:程式碼靜態掃描

Xray:製品漏洞掃描

JMeter:效能測試

Junit:單元測試

JaCoCo:程式碼覆蓋率

Ansible,saltstack:釋出


八、Pipeline中需要設定的質量關卡包括什麼?

質量關卡,即構建過程中的質量門,為確保每一個版本都能高質量釋出,建議將以下指標與部署包關聯,作為整個pipeline構建過程的質量關卡,如果有未達到的情況,記錄並處理。關卡包括:

       程式碼靜態掃描的issue數量

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

       漏洞掃描的結果

       開源許可證掃描

       不同環境是否具備不可變基礎設施

       整合測試是否透過

       效能測試結果

       較高的介面測試覆蓋率

      

九、什麼是一次構建,多次部署?如何在pipeline中實踐?

DevOps成熟度標準中建議做到一次構建,多次部署。目的是為了在測試環境測過的包可以在不改變任何環境和依賴的情況下發布到生產線上。釋出時重新打包往往會因為原始碼版本變更、基礎環境變更等因素導致釋出事故。

最佳實踐是使用製品提升倉庫級別的方案,使用Artifactory可以用起promotion的屬性進行製品提級。



十、如何在pipeline中設定構建引數?

Jenkins支援引數化構建,包括憑據引數、字元引數、密碼引數、布林值引數、檔案引數、文字引數、執行時引數、選項引數等。在pipeline中設定方法可以直接在片斷生成器中生成。(語法獲取可以使用片段生成器,搜properties)


十一、如何在pipeline中進行並行構建任務?

Jenkins pipeline支援並行構建任務,解決多個環境進行構建,或多個環境進行釋出的場景。使用序列十分影響效率,採用並行方式,通常是將命令下發給不同的agent,節省構建時間。(語法獲取可以使用片段生成器,搜parallel)


十二、如何在pipeline中優雅的使用密文?

Pipeline 中經常涉及到這樣一種場景,需要呼叫其他系統的api,難免會使用到一些key或者密碼 ,但是這些資訊直接明文寫到pipeline中非常不優雅,並且存在很大的安全隱患,所以在我們不希望展示這些key的場景下,可以使用Jenkins的憑證特性,解決這種問題 。(語法獲取可以使用片段生成器,搜withCredentials)


十三、如何在pipeline中設定定時啟動job?

某些特定場景下,如每天凌晨需要對專案進行一次clean的全量構建,佔用的時間和資源較多,我們可以使用Jenkins的構建觸發器功能觸發定時任務進行構建。(語法獲取可以使用片段生成器,搜properties)



十四、如何在pipeline中設定透過輪詢程式碼倉庫啟動job?

此觸發方式使用的較少,最佳實踐以webhook的方式觸發構建更方便,但是在少量特殊場景,如每天需要構建,但是版本不發生變化時不構建可以應用此觸發器



十五、如何在pipeline中設定透過其他job完成觸發啟動job?

在整合測試的時候需要大量的此類操作,公共元件構建了最新的版本要同時觸發所有依賴他的構建專案進行構建,確保此版本能正常被業務應用使用。


十六、如何在pipeline中設定透過git的webhook觸發啟動job?

透過Git的鉤子(webhook)功能觸發Jenkins構建任務,這種構建模式比較常見,DevOps成熟度標準中也把這一條當作三級評估的準則,是否每一次提交程式碼都能觸發完整的構建過程,決定了我們持續整合的速度和效率。


十七、如何將pipeline與流程審批系統對接?

為實現需要人工校驗是否繼續進行後續流程,對接審批流程等操作,Jenkins支援了構建等待的功能,可以在構建過程中暫停任務,等待下一步訊號。(語法獲取可以使用片段生成器,搜input)


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

在實際的專案中,往往需要多分支同時進行開發,如果每一個分支都建立一個jenkins專案 ,管理起來非常不方便。這種場景下需要使用多分支pipeline。常使用when引數來判斷分支。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2669187/,如需轉載,請註明出處,否則將追究法律責任。

相關文章