|
-- 會員 / 註冊 --
|
|
|
|
Jenkins 2.x實踐指南 ( 簡體 字) |
作者:翟志軍 | 類別:1. -> 程式設計 -> 綜合 |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 50933 詢問書籍請說出此書號!【缺書】 NT售價: 395 元 |
出版日:4/1/2019 |
頁數:252 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121360503 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: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 章;而第 4∼14 章可以作為參考手冊使用。 本書適合對 Jenkins 有初步認識,希望通過 Jenkins 實現持續集成、持續交付、DevOps 的技術人員,以及希望了解 pipeline as code 技術在實際工作中如何應用的讀者。 最后,感謝策劃編輯鄭柳潔女士為本書付出的努力;感謝劉杜康和黃獻華在百忙之中對部分章節的審校;感謝黃峰達在出版方面的幫助;感謝王曉峰在部署目錄命名方面的建議;感謝志平幫助處理我的個人照片;感謝妻子的理解與支持。 |
內容簡介:本書首先介紹筆者對軟件工程生產力的獨到見解。其次通過一個Hello world帶領初學者入門Jenkins pipeline。接著詳細介紹Jenkins pipeline的語法,以及在Jenkins pipeline中如何實現持續集成、持續交付中各個階段,包括構建、測試、制品管理、部署等;在發現現有pipeline的步驟不能滿足需求時,擴展Jenkins pipeline多種方式。本書第17章介紹了Jenkins如何整合多個第三方系統,以實現ChatOps及自動化運維。為避免讀者“不知從哪下手”的情況,本書通過一個簡單的案例介紹從無到有的設計pipeline。 |
目錄: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 后記 240 |
序: |
|