


Kubernetes 自己是一個以服務擴容見長的容器編排系統,若是不能跟其它 CI/CD 工具結合起來,從根本上說仍是不能提高開發部署效率,達到持續集成,持續交付的目的,本文以 Jenkins 配合 Kubernetes 完成 Java 服務持續集成和部署過程碰到一些問題,進行說明和總結。javascript

是否須要把 Jenkins 集成 Kubernetes 集羣中進行統一管理?java

Jenkins如何搭配 Kubernetes 實現持續集成?nginx


docker build -t docker.hub.com/dev/tomcat-webapps:$version .docker push docker.hub.om/dev/tomcat-webapps:$version
-
第一點,docker 構建鏡像須要 tag ,這個 tag 能夠經過 Jenkins 參數化構建,在構建以前輸入版本號,若是沒有輸入,填寫默認值便可。
第二點、歷史鏡像如何處理?比較建議每次鏡像構建完成以後,經過 Jenkins 配置命令刪除沒有運行的鏡像。git
具體根據使用場景處理這些中間產物。web
docker rm $(docker ps -a -q)
kubectl apply -f config.yamlsed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;kubectl apply -f tomcat_deployment.yaml

「麻雀雖小五臟俱全」一個項目功能很少,可是少不了 configmap、deployment、甚至 service,Jenkins 在打包過程確定要涉及到對這些文件的修改,問題來了,這些文件如何存放呢?docker
若是你有強大的 helm 包管理工具,固然能夠解決這些問題;若是你的項目沒有大到使用 helm 進行文件管理,能夠考慮把 yaml 配置直接放到源代碼某個目錄下面,利用 SVN/GIT 進行管理,也能夠直接放到服務器某個路徑下面,Jenkins 每次構建時 SSH 到這臺服務器進行備份、修改運行 yaml 文件。tomcat

三、在構建過程當中須要注意問題服務器
docker 鏡像構建過程當中經過參數化構建已經能夠修改版本號,一樣的,首先在 k8s 編排文件鏡像部分添加可以已知佔位符;微信
而後把這個版本號動態傳遞並替換到 k8s yaml 中;網絡
sed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;
在現實使用場景中,可能會存在多個Kubernetes環境,如何處理?
這時能夠根據狀況進行處理,好比線上環境和開發測試環境鏡像倉庫、集羣環境、Jenkins都是嚴格隔離的,那就能夠等到開發測試完成以後把上述流程從新走一遍。若是使用同一個 Jenkins 經過不一樣的用戶權限構建到不一樣環境也是相似道理。其實看你怎麼用,由於鏡像已經集中存儲到倉庫,正式線上環境直接拿着 yaml 就能夠跑起來,比之前上傳 war 更清爽。

四、總結
本文主要以 Jenkins 爲中心介紹了持續集成Kubernetes 過程,Jenkins自己是持續集成,持續交付工具鏈過程很是重要的一個部分,它是開源的而且提供了大量可用的插件,入門使用很是簡單,可是真正掌握好 Jenkins 使用並非一件輕鬆的事情,如何使用 Jenkins 建立出高效穩定、靈活的流水線是全部從事 DevOps 開發人員所亟待解決的問題。
推薦
docker bridge 到 k8s pod 跨節點網絡通訊機制演進
從Ice到Kubernetes容器技術,微服務架構經歷了什麼?
原創不易,隨手關注或者」在看「,誠摯感謝!
本文分享自微信公衆號 - 雲原生技術愛好者社區(programmer_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。