Jenkins 2.x 實踐指南

Jenkins 2.x 實踐指南

《Jenkins 2.x 實踐指南》系統地介紹Jenkins 2.X的核心特性:pipeline as code及實踐。

基本介紹

  • 書名:Jenkins 2.x 實踐指南
  • 作者:翟志軍 
  • ISBN:978-7-121-36050-3
  • 頁數:252
  • 定價:79
  • 出版社:電子工業出版社
  • 出版時間:2019-04
  • 裝幀:平裝
  • 開本:16
內容提要,目錄,前言,

內容提要

《Jenkins 2.x 實踐指南》首先介紹筆者對軟體工程生產力的獨到見解,然後通過一個Hello world 示例帶領初學者入門Jenkins pipeline,接下來詳細介紹Jenkins pipeline 的語法,在Jenkins pipeline 中如何實現持續集成、持續交付的各個階段,包括構建、測試、製品管理、部署等,以及當現有pipeline 的步驟不能滿足需求時,擴展Jenkins pipeline 的多種方式。最後介紹Jenkins 如何整合多個第三方系統,以實現ChatOps 及自動化運維;為避免讀者出現“不知從哪裡下手”的情況,本書通過一個簡單的案例介紹如何設計pipeline。
《Jenkins 2.x 實踐指南》的讀者對象包括:希望通過Jenkins 實現持續集成、持續交付、DevOps,以提升團隊生產力的技術人員和管理人員。

目錄

1 關於軟體工程生產力1
1.1 從另一個角度看“提高軟體工程生產力” 1
1.1.1 從勞動力要素考慮提高軟體工程生產力 2
1.1.2 從勞動對象要素考慮提高軟體工程生產力 2
1.1.3 從生產工具要素考慮提高軟體工程生產力 3
1.1.4 生產力三要素的意義3
1.2 Jenkins 介紹 4
1.3 Jenkins 與DevOps 4
1.4 本章小結 5
2 pipeline 入門6
2.1 pipeline 是什麼 6
2.2 Jenkinsfile 又是什麼 7
2.3 pipeline 語法的選擇 7
2.4 創建第一個pipeline 9
2.5 從版本控制庫拉取pipeline 11
2.6 使用Maven 構建Java 套用 12
2.7 本章小結 15
3 pipeline 語法講解16
3.1 必要的Groovy 知識 16
3.2 pipeline 的組成 18
3.2.1 pipeline 最簡結構 18
3.2.2 步驟 19
3.3 post 部分 20
3.4 pipeline 支持的指令 21
3.5 配置pipeline 本身 22
3.6 在聲明式pipeline 中使用腳本 24
3.7 pipeline 內置基礎步驟 25
3.7.1 檔案目錄相關步驟 25
3.7.2 製品相關步驟 27
3.7.3 命令相關步驟 28
3.7.4 其他步驟 29
3.7.5 小貼士 31
3.8 本章小結 36
4 環境變數與構建工具37
4.1 環境變數 37
4.1.1 Jenkins 內置變數 37
4.1.2 自定義pipeline 環境變數 38
4.1.3 自定義全局環境變數 39
4.2 構建工具 40
4.2.1 構建工具的選擇 40
4.2.2 tools 指令介紹 41
4.2.3 JDK 環境搭建 41
4.2.4 Maven 42
4.2.5 Go 語言環境搭建 45
4.2.6 Python 環境搭建 46
4.3 利用環境變數支持更多的構建工具 47
4.4 利用tools 作用域實現多版本編譯 48
4.5 本章小結 49
5 代碼質量50
5.1 靜態代碼分析 50
5.1.1 代碼規範檢查 50
5.1.2 使用PMD 進行代碼規範檢查 51
5.1.3 各靜態代碼分析器之間的區別 53
5.2 單元測試 53
5.2.1 JUnit 單元測試報告 53
5.2.2 JaCoCo 實現代碼覆蓋率 55
5.2.3 代碼覆蓋率越高,軟體的質量就越高嗎 58
5.3 性能測試 59
5.3.1 準備性能測試環境 59
5.3.2 運行JMeter 測試 59
5.4 SonarQube:持續代碼質量檢查 61
5.4.1 Maven 與SonarQube 集成 62
5.4.2 Jenkins 與SonarQube 集成 64
5.4.3 使用SonarQube Scanner 實現代碼掃描 67
5.4.4 SonarQube 集成p3c 68
5.4.5 將分析報告推送到GitLab 70
5.5 Allure 測試報告:更美觀的測試報告 72
5.5.1 Allure 測試報告介紹 72
5.5.2 集成Allure、Maven、Jenkins 73
5.6 當我們談質量時,談的是什麼 76
5.7 本章小結 76
6 觸發pipeline 執行77
6.1 什麼是觸發條件 77
6.2 時間觸發 77
6.2.1 定時執行:cron 77
6.2.2 輪詢代碼倉庫:pollSCM 79
6.3 事件觸發 79
6.3.1 由上游任務觸發:upstream 79
6.3.2 GitLab 通知觸發 80
6.3.3 在pipeline 中實現GitLab trigger 84
6.4 將構建狀態信息推送到GitLab 85
6.5 使用Generic Webhook Trigger 外掛程式實現觸發 87
6.5.1 從Webhook 請求中提取參數值 89
6.5.2 觸發具體某個Jenkins 項目 90
6.5.3 根據請求參數值判斷是否觸發Jenkins 項目執行 91
6.5.4 控制列印內容 91
6.5.5 控制回響 92
6.6 本章小結 92
7 多分支構建93
7.1 創建多分支pipeline 93
7.2 根據分支部署到不同的環境 96
7.3 when 指令的用法 97
7.4 GitLab trigger 對多分支pipeline 的支持 99
7.5 Generic Webhook Trigger 外掛程式在多分支pipeline 場景下的套用 99
7.6 本章小結 100
8 參數化pipeline 101
8.1 什麼是參數化pipeline 101
8.2 使用parameters 指令 101
8.2.1 parameters 指令支持的參數類型 102
8.2.2 多參數 104
8.3 由另一個pipeline 傳參並觸發 104
8.4 使用Conditional BuildStep 外掛程式處理複雜的判斷邏輯 106
8.5 使用input 步驟 107
8.5.1 input 步驟的簡單用法 108
8.5.2 input 步驟的複雜用法 109
8.6 小貼士 111
8.6.1 獲取上游pipeline 的信息 111
8.6.2 設定手動輸入步驟逾時後,pipeline 自動中止 111
8.7 本章小結 111
9 憑證管理112
9.1 為什麼要管理憑證 112
9.2 憑證是什麼 112
9.3 創建憑證 113
9.4 常用憑證 114
9.4.1 Secret text 114
9.4.2 Username with password 115
9.4.3 Secret file 115
9.4.4 SSH Username with private key 116
9.5 優雅地使用憑證 117
9.6 使用HashiCorp Vault 118
9.6.1 HashiCorp Vault 介紹 118
9.6.2 集成HashiCorp Vault 118
9.7 在Jenkins 日誌中隱藏敏感信息 120
9.8 本章小結 122
10 製品管理123
10.1 製品是什麼 123
10.2 製品管理倉庫 123
10.3 過渡到製品庫 124
10.4 管理Java 棧製品 125
10.4.1 使用Maven 發布製品到Nexus 中 125
10.4.2 使用Nexus 外掛程式發布製品 127
10.5 使用Nexus 管理Docker 鏡像 128
10.5.1 Nexus:創建Docker 私有倉庫 129
10.5.2 創建Docker 私有倉庫憑證 130
10.5.3 構建並發布Docker 鏡像 130
10.5.4 小貼士 131
10.6 管理原始製品 131
10.6.1 創建raw 倉庫 131
10.6.2 上傳製品,獲取製品 132
10.7 從其他pipeline 中拷貝製品 134
10.8 版本號管理 135
10.8.1 語義化版本 135
10.8.2 版本號的作用 136
10.8.3 方便生成版本號的Version Number 外掛程式 137
10.9 小貼士 138
10.9.1 Nexus 匿名用戶許可權問題 138
10.9.2 製品庫的容量要大 139
10.10 本章小結 139
11 可視化構建及視圖140
11.1 Green Balls 外掛程式 140
11.2 Build Monitor View 外掛程式 141
11.3 使用視圖 143
11.3.1 使用項目的維度建立視圖 143
11.3.2 設定默認視圖 145
11.4 本章小結 146
12 自動化部署147
12.1 關於部署有什麼好說的 147
12.1.1 部署不等於發布 147
12.1.2 什麼是自動化部署 148
12.1.3 自動化運維工具解決的問題 148
12.2 Jenkins 集成Ansible 實現自動化部署 149
12.2.1 Ansible 介紹 149
12.2.2 Jenkins 與Ansible 集成 150
12.2.3 Ansible 外掛程式詳解 153
12.3 手動部署比自動化部署更可靠嗎 156
12.4 如何開始自動化部署 157
12.5 小貼士 158
12.6 本章小結 159
13 通知160
13.1 郵件通知 160
13.1.1 使用Jenkins 內置郵件通知功能 160
13.1.2 使用Email Extension 外掛程式傳送通知 162
13.2 釘釘通知 164
13.3 HTTP 請求通知 166
13.4 本章小結 168
14 分散式構建與並行構建 169
14.1 Jenkins 架構 169
14.2 增加agent 170
14.2.1 對agent 打標籤 170
14.2.2 通過JNLP 協定增加agent 171
14.2.3 通過JNLP 協定增加Windows agent 175
14.2.4 通過Swarm 外掛程式增加agent 175
14.2.5 agent 部分詳解 176
14.2.6 小結 180
14.3 將構建任務交給Docker 180
14.3.1 在Jenkins agent 上安裝Docker 180
14.3.2 使用Docker 180
14.3.3 配置Docker 私有倉庫 181
14.4 並行構建 182
14.4.1 在不同的分支上套用並行構建 183
14.4.2 並行步驟 184
14.4.3 並行階段與並行步驟之間的區別 185
14.5 本章小結 185
15 擴展pipeline 186
15.1 為什麼要擴展pipeline 186
15.2 在pipeline 中定義函式 186
15.3 使用共享庫擴展 187
15.3.1 創建共享庫 187
15.3.2 使用共享庫 189
15.3.3 @Library 的更多用法 189
15.3.4 共享庫結構詳細介紹 190
15.3.5 使用共享庫實現pipeline 模板 192
15.4 通過Jenkins 外掛程式實現pipeline 步驟 193
15.4.1 生成Jenkins 外掛程式代碼骨架 193
15.4.2 啟動Jenkins 測試:mvn hpi:run 196
15.4.3 在Jenkinsfile 中使用greet 步驟 196
15.4.4 全局配置外掛程式 197
15.5 本章小結 199
16 Jenkins 運維200
16.1 認證管理 200
16.1.1 使用Jenkins 自帶的用戶資料庫 200
16.1.2 使用LDAP 認證 202
16.2 授權管理 204
16.2.1 使用Role-based Authorization Strategy 外掛程式授權 205
16.2.2 管理角色 206
16.2.3 許可權大全 207
16.2.4 角色分配 208
16.2.5 小結 210
16.3 Jenkins 監控 210
16.3.1 使用Monitoring 外掛程式監控 210
16.3.2 使用Prometheus 監控 211
16.4 Jenkins 備份 213
16.4.1 JENKINS_HOME 介紹 213
16.4.2 使用Periodic Backup 外掛程式進行備份 214
16.5 漢化 216
16.6 Jenkins 配置即代碼 216
16.7 使用init.groovy 配置Jenkins 217
16.8 本章小結 219
17 自動化運維經驗 220
17.1 小團隊自動化運維實踐經驗 220
17.1.1 先做監控和告警 220
17.1.2 一開始就應該做配置版本化 223
17.1.3 Jenkins 化:將打包工作交給Jenkins 223
17.1.4 將製品交給Nexus 管理 224
17.1.5 讓Jenkins 幫助我們執行Ansible 225
17.1.6 小結 225
17.2 ChatOps 實踐 226
17.2.1 Rocket.Chat 226
17.2.2 Hubot 227
17.2.3 Hubot 與Jenkins 集成 229
17.2.4 Jenkins 推送訊息到Rocket.Chat 231
17.3 本章小結 231
18 如何設計pipeline 232
18.1 設計pipeline 的步驟 232
18.2 以X 網站為例,設計pipeline 233
18.3 X 網站pipeline 詳解 236
18.3.1 儘可能將所有的具體操作都隱藏到共享庫中 236
18.3.2 只生成一次製品 236
18.3.3 對不同環境採用同一種部署方式 237
18.3.4 配置版本化 238
18.3.5 系統集成測試 238
18.3.6 如何實現指定版本部署 238
18.3.7 主幹開發,分支發布 239
18.4 本章小結239

前言

2016 年4 月Jenkins 發布了2.0 版本開始支持pipeline as code。同年11 月,pipeline as code 作為“採用”項出現在ThoughtWorks 技術雷達的採用環中。
2019 年1 月,筆者見同行在微信群里吐槽Jenkins 的老舊,比如Jenkins 不支持手動stage。經過了解,筆者大概猜到這位朋友還在使用Jenkins 1.x,或者知識還停留在Jenkins 1.x 上。因為他說的問題,在Jenkins 2.x 中已經不存在了。
這裡並不是想說這位朋友不了解Jenkins 2.x,而是想說Jenkins 1.x 已經成為過去式。長期以來,在中文網站上能搜到的關於Jenkins 的文章大多停留在Jenkins 1.x 時代。這樣想來,也就能理解為什麼這位朋友會有這樣的誤解了。
自Jenkins 2.0 發布已有三個年頭,據筆者所知,目前市面上還沒有pipeline as code 實踐方面的書籍。中文的Jenkins 書籍,只有《Jenkins 權威指南》一本,其中也並沒有pipeline as code 方面的介紹。本書彌補了這一空白,系統地介紹了Jenkins 2.x 的pipeline as code。
本書第1 章介紹筆者對軟體工程生產力的獨到見解;第2 章通過一個Hello world 示例帶領初學者入門Jenkins pipeline;第3 章詳細介紹Jenkins pipeline 的語法;第4-14 章介紹在Jenkins pipeline 中如何實現持續集成、持續交付的各個階段,包括構建、測試、製品管理、部署等;第15 章介紹擴展Jenkins pipeline 的多種方式,本章對希望通過Jenkins 實現持續集成、持續交付平台的讀者非常有幫助;第16 章介紹Jenkins 運維相關知識;第17 章介紹筆者整合Jenkins 與多個第三方系統,實現ChatOps 及自動化運維的經驗;為避免讀者出現“不知從哪裡下手”的情況,第18 章通過一個簡單的案例介紹如何設計pipeline。
筆者建議所有讀者都要閱讀第1 章和第3 章,它們是本書的核心;已經入門了Jenkins pipeline的讀者可以跳過第2 章;而第414 章可以作為參考手冊使用。
本書適合對Jenkins 有初步認識,希望通過Jenkins 實現持續集成、持續交付、DevOps 的技術人員,以及希望了解pipeline as code 技術在實際工作中如何套用的讀者。

相關詞條

熱門詞條

聯絡我們