什麼是詹金斯? 歷史、架構、管道和優勢
已發表: 2020-05-01對於願意集成 DevOps 不同階段的團隊,可以通過持續集成來實現。 有多種工具可用於幫助執行此集成。 其中最受歡迎的之一是詹金斯。 但是,在您開槍並開始使用此工具之前,您必須了解它到底是什麼,它是如何工作的,它具有哪些功能,以及它與其他類似工具相比具有哪些優勢。
Jenkins 剛推出的時候,還只是一個開源的持續集成工具。 然而,在最近的更新之後,它已經成為一個能夠執行兩項工作的工具——持續集成和持續交付。 它現在也是一種有助於組織應用程序部署的工具。 本博客旨在涵蓋在您開始在 IT 項目中使用 Jenkins 之前您應該了解的所有詳細信息。
目錄
詹金斯的歷史
就像多年來我們有很多關於開發這麼多技術和工具的有趣故事一樣,我們也有一個關於 Jenkins 的故事。 可以追溯到 2004 年,Jenkins 的開發者 Kohsuke Kawaguchi 作為 Java 開發者在 Sun Microsystems 工作。
Kawaguchi 幾乎不知道未來對他來說有一些非常特別的東西。 當時,川口參與了多個開發項目。 他不喜歡由於代碼失敗而破壞構建。 這使他尋找可以幫助他在代碼提交到存儲庫之前知道代碼是否可以工作的東西。
這種好奇心導致了名為 Hudson 的自動化服務器的開發。 2011 年,獨立的 Hudson 開源社區與 Oracle 之間發生了一場臭名昭著的糾紛,後者現在將 Sun Microsystems 納入旗下。
這場爭論導致了一個名為 Jenkins 的分叉。 詹金斯和哈德森都繼續存在了很長時間。 然而,詹金斯是更受歡迎的選擇。 Hudson 項目於 2020 年 1 月關閉。Jenkins 仍然活躍。

什麼是詹金斯?
Jenkins 可以被稱為 DevOps 團隊使用的自動化工具,希望將持續集成引入他們的項目中。 它是用 Java 構建的開源軟件。 它在軟件開發的整個生命週期中使用。
不僅在開發和測試中,而且在部署中。 它允許開發人員輕鬆地將更改集成到他們的項目中。 Jenkins 還用於軟件項目的持續交付。
了解:使用 DevOps 解決實時場景
持續集成如何工作?
持續集成 (CI) 是軟件開發過程中不可或缺的一部分。 它可以包含許多不同的任務,包括使用存儲庫中的獨特功能、功能開發和錯誤修復等。
持續集成工具(例如 Jenkins)非常適合識別當前應用程序源的問題,並通過在自動構建和測試功能的幫助下檢查集成過程來提供快速響應。
持續集成來自與敏捷方法相關的編程模型。 然而,這個概念仍然可以應用於所有那些本質上是迭代的編程模型。
瀑布模型和其他此類開發方法也可以從持續集成所提供的功能中受益。 CI 通常與持續交付 (CD) 協同工作,以更快的速度和自動化的方式將可執行代碼交付到生產環境中。 下面列出了常見的 CI 實踐:
- 常規代碼提交
- 構建分期
- 專用於集成的構建機器
- 持續反饋
- 開發者測試分類
考慮到您的項目和公司,可以以您認為合適的任何頻率發布持續集成。 因此,使用 CI 的公司比使用傳統軟件開發流程的公司有更多的定期發布。
越來越多的公司開始使用 CI,因為一個簡單的事實——即使是代碼中最微小的變化也可能產生新的構建。 CI 可以在軟件開發過程中給予持續的反饋。
這有助於 DevOps 團隊擺脫每個開發階段的錯誤。 它還可以在開發過程的早期發現問題。 這使得這些問題的破壞性較小、不太複雜且易於處理。
閱讀:市場上的頂級 DevOps 工具
持續交付如何工作?
持續交付是軟件開發過程的一部分,它使您能夠以始終準備好將軟件發佈到生產環境的方式繼續開發。 以下是持續交付證明另外富有成效的幾次:
1. DevOps 團隊確保即使在功能開發過程中軟件也可以部署
2. 在整個軟件開發週期中,軟件已準備好部署
3. 通過按鈕方式部署是實現不同版本軟件到不同按需環境的現實
如何實現持續交付? 第一個要求是軟件應該已經在進行持續集成。 然後,開發團隊應該構建可執行文件並對其執行測試以檢測錯誤或錯誤。 此外,在不同的生產環境中測試可執行文件以確保軟件隨時可以發送到生產環境非常重要。 為此,有必要進行部署。
Jenkins 的自動化使公司能夠顯著加快他們的軟件開發過程。 Jenkins 能夠集成不同類型的軟件開發生命週期流程,包括構建、測試、部署等。 插件對於確保持續集成非常重要。 如果您希望向 Jenkins 添加新工具,您首先必須確保為它安裝插件。
閱讀:詹金斯面試問答
什麼是詹金斯管道?
Jenkins 管道是按順序相互連接的作業、任務或事件的組合。 換句話說,它是一組插件,可以輕鬆集成和實施持續交付管道。 可擴展的自動化以代碼的形式並在特定領域的語言或 DSL 的幫助下支持創建複雜和簡單的交付管道的管道。
現在讓我們討論一下持續交付管道及其工作原理。 Jenkins 管道的基本特徵是它持有的每個事件、任務或作業都以一種或另一種方式依賴於這些事件、作業或任務中的一個或多個。 持續交付管道具有不同的狀態,例如構建、測試、部署、發布。 所有這些狀態都相互關聯。
持續交付管道是每個狀態的事件工作的序列。它是獲取版本控制軟件所需的過程的自動化表達。 在軟件發布之前,對軟件所做的所有更改都必須經過幾個複雜的過程。 此過程還確保以可重複和可靠的方式開發軟件,並涉及軟件進行的多個測試和部署階段。
JenkinsFile 是一個文本文件,用於定義 Jenkins 管道。 JenkisFile 經常被用來以代碼的形式來實現管道,而這整個過程都是使用 DSL 來定義的。 您還可以使用 JenkinsFile 寫下運行 Jenkins 管道需要遵循的步驟。 下面提到的是使用 JenkinsFile 的一些好處:

- 它使審查管道上的代碼變得容易。
- 它可以幫助您對為不同分支創建的所有管道執行拉取請求。
- 它是可以由不同用戶修改的管道的唯一來源。
- 它可以幫助您對 Jenkins 管道進行審計。
JenkinsFile 使用兩種類型的語法定義
聲明性管道語法
使用這種語法創建管道要容易得多。 它具有完善的層次結構,有助於創建管道。 它為您提供了簡單的方法來控制與管道執行相關的各個方面。
腳本化管道語法
它使用輕量級執行器並在 Jenkins master 上運行。 它有自己的一組資源,可用於將管道轉換為原子命令。 從它們的定義中可以很明顯地看出,這兩種語法彼此完全不同。 不僅如此,它們甚至還以不同的方式定義。
為什麼要使用 Jenkins 管道?
Jenkins 通過其持續集成功能使軟件開發過程自動化。 您可以使用不同的用例來創建許多自動化作業,然後使用 Jenkins 管道來運行所有這些作業。 下面列出了使用 Jenkins 管道的幾個原因:
- 由於它是以代碼的形式實現的,因此 Jenkins 管道可以擁有多個可以編輯和執行流程的用戶。
- 它支持比平常更大的項目。 一次運行多個項目或在循環中使用管道都是可能的。
- 他們很健壯。 如果您的服務器在不可預見的情況下重新啟動,您不必擔心。 Jenkins 管道將自動恢復。
- 在您收到用戶輸入之前,管道過程可以暫停並且不會恢復。
詹金斯架構
在本節中,我們將重點討論 Jenkins 如何幫助開發人員和測試人員? 讓我們討論一下 Jenkins 持續集成來理解這一點。
一開始,開發人員在源代碼中進行他們想要的所有更改。 此代碼存儲在 Git 存儲庫中。 在提交這些更改之後進行修改。 Jenkins 服務器正在完成其工作並跟踪對存儲在存儲庫中的文件所做的更改。 Jenkins 服務器會檢測到開發人員所做的更改。 然後 Jenkins 提取這些更改並開始基於這些更改構建新的軟件,
如果構建失敗,相關團隊會收到通知。 另一方面,如果構建成功,Jenkins 會將其部署在測試服務器上。 開發人員會收到有關構建開發和測試結果的通知。 這個循環繼續重複。
現在我們了解了 Jenkins 的工作原理,我們將更容易區分它的工作方式以及之前用於發布和部署的方式。
所以在 Jenkins 脫穎而出之前,這個過程涉及到完整源代碼的構建和測試。 定位和修復錯誤和缺陷根本不是用來延遲軟件交付的簡單任務。 開發人員不得不等待很長時間才能獲得測試結果。 部署過去是手動進行的。
在 Jenkins 之後,對源代碼中的所有更改都進行了測試。 開發人員不需要通過完整的源代碼來定位錯誤和錯誤。 構建版本的發布現在更加頻繁。 開發人員被告知所有更改和提交的測試結果。 提交更改後,Jenkins 服務器可以開始執行其他進程。
Jenkins 分佈式架構
Jenkins 在主從架構的幫助下管理構建。 主從單元使用 IP/TCP 協議相互通信。 這裡有一個關於它是如何工作的小下載。
詹金斯大師
這是 Jenkins 的主服務器。 它處理許多任務,包括但不限於調度構建作業、記錄和呈現構建結果、將構建分派給從屬服務器執行、離線和在線監控所有從屬服務器等。 Master Jenkins 能夠直接執行構建作業。
詹金斯奴隸
它在遠程服務器上運行。 Jenkins 服務器遵循 Jenkins master 的請求,兼容所有操作系統。 由 master 分派的構建作業由 slave 執行。 該項目可以適當地配置以選擇特定的從機。
詹金斯的好處
1. Jenkins 是一個開源工具,非常易於安裝和使用。 您不需要額外的組件來使用它
2.免費,可在不同平台上使用,如Windows、Linux、macOS等
3. 應用廣泛,所以在網上社區尋求支持不是什麼大問題
4. Jenkins 自動化所有集成工作。 集成問題很少,因此它有助於在項目生命週期中節省時間和金錢。
5、易於配置、擴展和修改。 它允許即時生成測試以及在不同平台上構建、自動化和部署代碼
6. Jenkins 可以配置為正確運行 CI 和 CD 概念
7.它可以很容易地檢測和修復問題。 該軟件始終準備好突然發布
8. 支持多種插件,提供更好的靈活性
9. 有助於及早發現錯誤,從而為開發人員節省大量時間和精力
使用 Jenkins 插件提高生產力
以下是開發人員使用的一些最常用的插件。

1.作業生成插件
在成長中或更大的組織中維護項目工作有點困難,因為開發人員經常在不同的分支和版本上工作。 雖然您已準備好讓開發人員自行創建工作,但您不確定他們是否能夠滿足公司標準。 這是一個很大的困境。 該插件允許您定義模板,您的開發人員可以使用這些模板來創建作業。 您可以使用基於角色的授權插件禁用模板的配置訪問。
2.全局構建統計插件
了解您當前的容量、功能和使用情況對於為系統要求或容量規劃做好準備非常重要。 您應該知道定期發生的構建數量。 您還需要知道發布構建所需的時間。 該插件為您提供回答所有這些問題所需的所有必要信息。
3. GitLab/GitHub 拉取請求構建器
您可以使用此模板將 GitLab/GitHub 中的代碼審查過程自動化到比平時更高的水平。 對於每個拉取請求,您可以期望這個插件不僅運行構建,還構建結果並與拉取請求共享狀態或收集重要的靜態分析。 這個插件告訴了很多關於需要合併的代碼。 在某些情況下也可以使用此插件定義自動合併。
結論
這個博客提供了關於 Jenkins 如何工作以及如何使用 CI/CD 實現不同項目想法的合理想法。 它是當今最受歡迎的 DevOps 工具之一,其有效的界面和插件使事情變得非常容易。
如果您有興趣了解有關全棧開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和作業, IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。