https://www.jianshu.com/p/c5fa45312f5b?from=timeline
1.什么是pipeline?
在jenkins官方文檔是這樣介紹pipeline的:Jenkins Pipeline (or simply "Pipeline") is a suite of plugins which supports implementing and integrating continuous delivery pipelinesinto Jenkins.它的意思就是pipeline是一套jenkins官方提供的插件,它可以用來在jenkins中實現和集成連續交付。
下面我就盜用jenkins官方的圖的說一下我在實際使用中對pinpeline的理解
如上圖所示,這是通過pipeline進行CI/CD的一個簡單模型。
我的理解就是;pepeline是一個流程,這個流程定義了完成過一個CI/CD流程的步驟,通過執行這個流程代替手工自動去完成CI/CD,這個流程是由使用者自己定義的。
整個流程主要有以下幾個模塊組成:
1.agent
2.param
3.stage
首先介紹stage。pipeline實際上就是由很多個stage組成,每個stage完成一件事情。就像上圖中第二個stage用來構建項目,第三個stage用來測試項目。所以定義pipeline實際上就是定義多個stage。而stage是由多個step組成,由step來定義這個stage是如何完成一個任務的。比如要執行test這個測試stage,通過step定義第一步拉取代碼,第二步進行測試,第三步將測試結果發送郵件。
接着就是agent,agent是用來定義CI/CD流程環境的,比如你在構建gradle項目的時候需要gradle環境,這時候就由agent來定義。agent可以定義全局的,就是所有的stage都會在這個環境中進行,也可以放在stage中,意味這只有該stage會放在這個環境中執行。
然后就是param。param是為整個流程提供參數的。這一點是很好的,比如你使用git進行代碼管理,你需要構建某個流程,這時候你只要在構建的時候指定分支參數就可以構建項目。
最后,還有其他部分,比如所有的stage都執行完成了,或者失敗了,這時候你需要發送郵件,你可以在最后的部分定義發送郵件,不論構建成功與否。
2.定義pipeline
pipeline的定義被寫在一個文本文件——jenkinsfile,該文件又可以提交給項目的源代碼控制庫, 將pipeline視為應用程序的一部分,以便像任何其他代碼一樣進行版本控制和審查。
創建Jenkinsfile並將其提交給源代碼管理提供了許多直接的好處:
1.自動為所有分支和拉取請求創建pipeline構建過程。
2.pipeline上的代碼審查/迭代(以及剩余的源代碼)。
3.pipeline的審計跟蹤。
4.可由項目的多個成員查看和編輯。
雖然在Web UI直接定義pipelins和使用 Jenkinsfile定義是相同的,但通常認為最佳做法是使用Jenkinsfile定義pipeline並檢查其中的源代碼控制。
3,為何選擇Pipeline?
從根本上說,Jenkins是一個支持多種自動化模式的自動化引擎。Pipeline為Jenkins添加了一套功能強大的自動化工具,支持從簡單的持續集成到全面的CD pipeline的用例。通過對一系列相關任務建模,用戶可以利用Pipeline的許多功能:
代碼:pipeline在代碼中實現,通常檢查到源代碼控制,使團隊能夠編輯,審查和迭代其交付管道。
持久:pipeline可以在Jenkins master的計划內和計划外重啟中存活。
Pausable:在繼續pipeline運行之前,pipeline可以選擇停止並等待人工輸入或批准。
多功能:pipeline支持復雜的實際CD要求,包括並行分叉/連接,循環和執行工作的能力。
可擴展:Pipeline插件支持其DSL的自定義擴展 和多個與其他插件集成的選項。
