第一個Build
CI Dojo的第二次課程,基於上次課程 CI基礎 & Setup環境 搭建好的環境,通過Step by step的方式來搭建一個Jenkins CI。
內容涵蓋了兩大部分, 配置Jenkins
和 Step by step Build
,Jenkins基礎配置如下:
1. 配置系統環境。 2. 安裝系統工具。 3. 安裝實用Plugin。 4. 配置用戶權限。
Step by step Build如下:
1. 構建觸發策略。 2. 測試Success & Failure。 3. 測試報告。 4. 郵件通知。
配置Jenkins
夯實地基,方可建築高樓
在 CI基礎 & Setup環境 那節課程中,我們已經Setup了Jenkins CI,併成功啓動了Jenkins服務,此時我們看到的只是一個非常基礎的Jenkins,爲了滿足項目的需求,我們要對其做一些配置。比如郵件通知、用戶權限配置,以及執行一些任務所用到的工具(Gradle、Git、JDK等)。
配置系統環境
此時,我們所需要配置的系統環境並不複雜,所有配置都是在configuration
頁面完成,目錄導航 Manage Jenkins -> Configure System
,配置項包括:
1. Shell executable 2. E-mail notification 3. System Admin e-mail address
Shell Shell executable
將此項設置爲bash
,更加符合平時在Terminal上的操作習慣,個人習慣,屬於建議項,配置如圖:
E-mail notification
E-mail是一個很好的反饋通知機制,爲build配置了Email通知,將會在build失敗後第一時間通知相關人員,這也是CI反饋機制中的關鍵步驟,那麼要啓用郵件通知,需要我們配置全局的E-mail notification:
這裏使用 網易126郵箱 的免費 SMTP 服務器,需要提供有效的郵箱賬戶,並且需要開啓
IMAP/SMTP服務
,具體怎麼開啓,Google 或者 百度 中可以找到答案。
配置完成後,可以測試一下是否能夠發送郵件,選中Test configuration by sending test e-mail
,填上有效的郵箱地址,點擊Test configuration
即可,通常情況下,你會看到一些紅色的異常信息,不要害怕,繼續往 ⬇️ 看。
System Admin e-mail address
此項配置是爲了保證E-mail通知的正常運行,因爲Jenkins只允許系統管理員執行Email通知,所以只有系統管理員郵箱地址和發郵件的賬戶是一個賬戶是纔可以成功發送郵件通知:
系統工具
全局的系統工具用來執行相關任務,比如Gradle執行編譯、測試、打包等任務,Git去pull代碼,JDK提供Java執行環境。在Jenkins中,我們可以通過GUI來配置一些基本的工具:Manage Jenkins->Global Tool Configuration
實踐指導: 通常,我們不會在Jenkins Web GUI上配置安裝這些工具,需要的工具我們會在Server機器上通過其他方式,比如:我們可以將安裝命令放在provision的shell腳本中(可以使用Ansilbe腳本),在
Vagrant up
的時候進行自動化安裝,此次Dojo我已經在 Dojo-ci 中提供了這個Shell腳本。
安裝插件
工慾善其事必先利其器
Jenkins之所以強大並不是Jenkins自身有多麼的強大,Jenkins提供了一個平臺,因爲它的易用性和開源,深受社區開發者的青睞,從而營造了一個良好的生態,各種實用插件的應運而生讓Jenkins的功能變得越來越強大,幾乎無所不能。就連Jenkins久遭詬病的外觀,也有一款 Jenkins主題 插件來拯救它。所以插件是Jenkins中不可忽視的核心部分。
在Jenkins中,安裝插件也是一件很容易的事情,導航到Manage Plugins頁面(Manage Jenkins->Manage Plugins
),在 Available
Tab中搜索Jenkins,選中後點擊安裝。
此次Dojo,需要安裝以下插件:
- Simple Theme Plugin
- Git plugin
- 使用Git作爲版本控制工具
- Environment Injector Plugin
- 給Build注入環境變量
- Copy Artifact Plugin
- 在某個project的build步驟中,複製其他project生成的artifact。
- Build Pipeline plugin
- 通常一個Build flow包含了多個Job,會有多個對應的project,此插件可以定義這些關聯的project的執行順序,並且可以定義觸發下游project的條件(自動還是手動)。
- Join plugin
- 管理並行Job,能夠保證當前project在所有直接的下游project完成後運行。
- Build flow test aggregator
- 將build flow中所有build的測試結果聚合展示出來,它提供的是post-build步驟。
- Dependency Graph Viewer Plugin
- 可視化project之間的依賴關係
- JaCoCo plugin
- 可以捕獲由JaCoCo生成的代碼覆蓋率報告,而且會生成覆蓋率趨勢報告。
用戶權限
Jenkins提供了用戶權限控制,這其實是一個基礎的配置。通常Jenkins上會包含一些敏感的信息和複雜的配置,以及手動一鍵部署的步驟,所以我們只允許擁有特定權限的用戶纔可以對Build執行相關操作,比如說匿名用戶只有可讀權限,sjyuan
是管理員權限,use1
只擁有 dojo-ci
project的權限。
比較常用的認證方式是Matrix-based security
和 Project-based Matrix Authorization Strategy
,前者配置的權限針對所有Project是一致的,而後者可以將用戶權限綁定到某些具體的Project中。相對來說後者更加常用一些,這裏以後者爲例,sjyuan
是管理員,在Global配置中分配了所有權限,而user1
只擁有全局的Read Overall權限(這是前提條件,不然user1
登陸後什麼也看不到):
此時我們以sjyuan
登錄進去之後在dojo-ci-web
project中給user1
授予部分權限:
不管配置哪一種用戶權限,我們使用的Security Realm
都是Jenkins’ own user database
:
實踐指導: 第一次配置用戶權限時,將當前用戶設置爲管理員權限,記得賦予admin權限,建議取消
Allow users to sign up
選項,統一由管理員給指定成員分配用戶並授權。
Build in Action
基礎的Jenkins已經配置就緒,我們來創建一個Build project來感受一下Jenkins的魅力。後面所有工作均可以在Web GUI上完成。
創建一個自由風格的工程,點擊Home頁面上New Item
link進入創建頁面:
基礎配置
我們創建了一個名爲 dojo-ci-web 的project,進入配置界面,來做一些基礎的配置:
- 上述給user1賦予了該項目上的部分權限。
- 配置歷史build的棄留策略。
- 配置了 Github project的url。
- 另外還有一些配置,比如拷貝該項目Artifact的權限、環境準備、參數化項目等等,有興趣的可以學習一下這些配置的用途,推薦 Jenkins Tutorial。
配置Git Repository
在Source code management
欄配置Git Repository,需要提供一個Github賬號,作爲IT從業者,該賬號應該不是問題,還沒有的話可以到Github上註冊一個
配置觸發構建策略
在Build Triggers
欄配置觸發構建策略:
Poll SCM,輪詢Source Code Management,每個2分鐘去檢查Repository有沒有新的提交,如果有,觸發build,否則不做處理。輪詢規則設置就是標準的Cron的規則,推薦一個在線調式的工具。
運行測試
在 Build
欄添加build step,Add build step -> Execute shell
./gradlew clean test
命令是CI所配置的代碼庫中運行測試的gradle task,Gradle是一個用於Java工程的構建工具,做的事情跟Maven類似,只是目前更加受到Java Developer的青睞。
到這裏我們先做一個保存,點擊左下方的Save
按鈕,然後再次進入配置界面。
發佈測試報告
運行測試完畢後,可以直觀地看到測試狀態 (綠色:成功,紅色:失敗),我們還可以在測試報告後發佈測試報告,它的配置也很簡單,只需要在 Post-build Actions
欄中添加post-build操作,Add post-build action->Publish JUnit test result report
:
郵件通知
CI 不過夜,其實說的是要第一時間修復CI
通常,測試掛了,我們會希望第一時間通知相關人員去修復CI,不要讓CI掛了還心安理得地過夜,這就需要一些有效的反饋機制了,此時我們會考慮引入郵件通知,前面我們已經配置好郵件服務器並測試通過了,此時需要添加一個Post-build Actions
,Add post-build action->E-mail Notification
:
到此,一個可以報告測試狀態的CI Build搭建起來,過程並不複雜,我們已經能夠直觀的看到CI的效果了。下一節課我們來討論構建構建可持續部署Pipeline的策略並加以實踐。
上節課內容回顧:CI基礎 & Setup環境
版權聲明:自由轉載•非商用•非衍生•保持署名 | Creative Commons BY-NC-ND 3.0