Jenkins持續整合伺服器一直是DevOps浪潮中的重要組成部分。作為持續整合與持續部署環境中自動化任務的中央協調伺服器,全球的開發和運營團隊已經積極接納Jenkins,併為之構建了多種擴充套件及構建包。 然而,從設計初衷角度來看,Jenkins並沒有考慮到面向容器環境的遷移需求。
Cloudbees公司高階架構師James Strachen身為Jenkins X[1]專案負責人,他一直在思考這種遷移對Jenkins使用者的意義及影響。
他表示,將CI/CD管道遷移到配備容器及容器編排工具(如Kubernetes)的基於容器雲託管環境時,使用者需要在構建、測試和部署過程中建立更高的自動化水平。Strachen說:“ 為了實現這一點,Jenkins X必須具備遠超常規Jenkins的易學習性及易用性。”
“我們要做的,是打破少數人對相關知識的‘壟斷’。這部分人往往對Jenkins非常瞭解,但是團隊裡的每個人都有權也有意願參與其中。我們需要開發人員能夠隨時根據需求啟動新的專案——這也正是微服務時代的最大差異優勢所在。我們希望Jenkins自助服務能夠像雲一樣全面改寫。”
“Jenkins X的標的是將Jenkins轉化為一種自助服務裝置,允許任何開發人員啟動新專案,而與之相關的全部管道及匹配元素都能夠順利到位。 當然,這並不是說團隊成員完全不需要瞭解Jenkins,但更重要的是我們希望讓CI/CD擁有與雲服務類似的低準入門檻,”他解釋稱。
Strachen在3月中旬發表的一篇博文[2]中詳細介紹了Jenkins X的技術細節,當時該專案才剛剛面向公眾正式公佈。在文章中,他解釋稱Jenkins X可用於設定Jenkins管道,自動生成Jenkinsfile和Dockerfile以定義應用程式的管道與打包步驟。
由於Docker和Kubernetes的執行活動同Jenkins設計環境存在一些差別,因此Strachen表示Jenkins X還需要將安全保障機制引入到複雜的容器映象構建過程中。Strachen指出,使用者可以利用自己的Dockerfiles或pop在管道中使用其最熟悉的容器構建工具。Strachen同時提到,Skaffold[3]是一種用於構建和標記Docker映象的工具——儘管聽起來很簡單,但其意義卻非常重大。
“[Skaffold]負責管理Docker和安全模型的複雜性事務。 如果您使用Google Cloud,則可能需要使用谷歌提供的容器構建器。 您可能需要在自己的Kubernetes叢集中使用SaaS CI或本地Docker套接字。 這種方法會帶來安全隱患,因為這意味著使用者將掌握裝置的root許可權。因此,絕對不可讓他人訪問生產叢集中的Docker套接字。舉例來說,在預設情況下,Jenkins S會假設使用者處於開發叢集當中,並有權訪問Docker套接字。但很明顯,這樣的假設並不靠譜,”Strachen強調稱。
Strachen認為這是未來Docker映象構建層面的一大主要問題。“我們需要利用Skaffold以及其它同類工具將使用者與高許可權隔離開來。我希望這一標的能夠儘快實現。”他曾聽到未經證實的訊息稱,Skaffold可能會在未來幾個月內獲得上述能力。
“在開發群集上,我們允許使用者使用Docker來構建映象。 大家往往堅定地相信團隊中的開發者不會利用這些硬體挖掘比特幣。 而在生產群集上,我們不需要構建映象,而只是使用已經構建完成的現成映象。 這是一個簡單的方法,易於實現,而且能夠有效消除風險。我認為從長遠角度來看,為了確保在不使用Docker守護行程、root或其它特殊許可權的前提下構建Docker映象,最好是能夠將Docker構建流程徹底移出Kubernetes叢集之外,”Strachen表示。
未來,Strachen表示Jenkins X團隊在穩定性和相容性方面還擁有多項開發標的。 “最重要的是檢查一切組成元素。 在同一時間內支援多種雲環境可謂極具挑戰性。 因此,我們的第一項重點在於構建起堅如磐石的集群系統。 此外,我們還需要支援更多的Git供應程式以及問題跟蹤器。 我們正在新增Jira支援能力,此外社群中也有部分貢獻者正在進一步擴充套件Git供應程式的支援範圍,例如GitLab和BitBucket[4],”Strachen表示。
“著眼於更長期的標的,我們將著力改進反饋與整合等機制。 我們擁有一份宏觀路線圖,主要關註增加構建包的數量,此外還需要實現更廣泛的語言支援能力,”Strachen說。
核心開發團隊當前的另一項研究標的是與Anchore CI/CD安全掃描軟體進行整合。 Anchore[5]負責根據漏洞資料庫分析程式碼與Docker映象。
在實現上述複雜標的的過程當中,有一段程式碼已經為Jenkins X團隊節省了大量時間,這就是UpdateBot。 這款小工具執行在其他專案更新庫的依賴關係庫中,能夠自動提交請求以使用新的依賴項。
“有時候,我們需要使用上游庫,”Strachen說,“而其他團隊正在使用下游類庫。通常情況下,如果不存在資訊交換,這些庫很少需要進行更新。但在實際更新過程中,我們需要採取持續部署的處理方法。UpdateBot[6]要做的在執行過程中嚴格遵循持續部署原則。這些庫不會被部署為Docker映象,而是作為版本更改、經過更新的XML檔案或基礎Docker映象檔案存在。”
Strachen表示,這種在更新過程中持續面向下游消費者推送請求的作法,能夠有效防止錯誤因未被及時發現而在更新週期之後集中爆發。
“我個人最欣賞的一點在於,如果上游開發者犯了錯誤,他們會立刻發現問題。這是因為在持續釋出的版本中,所有相關請求都會遭遇故障。如此一來,將不致出現某一團隊的失誤導致另一團隊的工作成果付之東流,並有效避免由此引發的團隊間摩擦與挫敗感。必須承認,犯下錯誤的團隊往往對此毫不知情,因此在傳統變更流程當中,當人們意識到存在嚴重問題時,其間往往已經進行過無數次變更——也就是說根本無法判斷問題到底源自哪裡。而持續部署原則將徹底攻剋這一難題,”Strachen總結稱。
-
https://github.com/jenkins-x
-
https://jenkins.io/blog/2018/03/19/introducing-jenkins-x/
-
https://github.com/GoogleCloudPlatform/skaffold
-
https://bitbucket.org/
-
https://anchore.com/
-
https://wiki.jenkins.io/display/JENKINS/UpdateBot+Plugin
原文連結:https://thenewstack.io/jenkins-x-brings-automated-pipelines-to-kubernetes/
本次培訓內容包括:容器原理、Docker架構及工作原理、Docker網路與儲存方案、Harbor、Kubernetes架構、元件、核心機制、外掛、核心模組、Kubernetes網路與儲存、監控、日誌、二次開發以及實踐經驗等,點選瞭解具體培訓內容。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。