內容提要
《DevOps 實踐》介紹了DevOps 的起源和概覽,並通過一個貫穿全書的例子,從架構開始,到代碼的存儲、構建、測試、部署、監控,直至流程的跟蹤,推薦了許多可用的工具和可行的示範,是一本DevOps實踐方面不可多得的參考書籍。
《DevOps 實踐》面向願意承擔更大責任的開發人員和系統管理員,也很適合願意更好地支持開發人員的運維人員。無須任何DevOps 知識即可快速上手!
目錄
前言 XIII
1 DevOps 和持續交付簡介 1
DevOps 簡介 1
多快才算快? 3
敏捷之輪 4
敏捷不只是形式 5
DevOps 和ITIL(信息技術基礎架構庫) 7
總結 8
2 洞察全局 9
DevOps 流程和持續交付——概覽 9
開發人員 10
版本控制系統 12
構建伺服器 13
工件庫 13
包管理器 13
測試環境 14
預發布/生產 15
發布管理 15
Scrum、看板和交付流水線 16
圓滿結束——一個完整的例子 17
識別瓶頸 18
總結 18
3 DevOps 如何影響架構 19
介紹軟體架構 19
單塊系統場景 20
架構經驗法則 21
關注點分離 21
內聚原則 21
耦合 22
回到單塊系統場景 22
一個真實例子 22
三層系統 23
表示層 23
業務層 24
數據層 24
處理資料庫遷移 24
滾動升級 25
Liquibase 的Hello world 26
變更記錄檔案 27
pom.xml 檔案 27
手動安裝 29
微服務 30
小插曲——康威定律 31
如何保持服務接口向上兼容 32
微服務和數據層 33
DevOps、架構和彈性 33
總結 34
4 一切皆代碼 35
原始碼控制的必要性 35
原始碼管理歷史 36
角色和代碼 37
哪一個原始碼管理系統? 38
原始碼管理系統遷移之言 39
選擇分支策略 39
分支問題域 41
工件版本命名 42
選擇一個客戶端 43
創建一個基本的Git 伺服器 44
共享認證 45
託管Git 伺服器 45
大的二進制檔案 46
嘗試不同的Git 伺服器實現 47
中場休息,插播Docker 48
Gerrit 49
安裝git-review 包 49
歷史修正主義的價值 50
拉請求模型 52
GitLab 52
總結 54
5 構建代碼 55
我們為什麼要構建代碼 55
構建系統的各個方面 56
Jenkins 構建伺服器 57
管理構建依賴 60
最終工件 61
用FPM 取巧 62
持續集成 63
持續交付 64
Jenkins 外掛程式 64
託管伺服器 66
構建從機 66
主機上的軟體 67
觸發器 68
任務鏈和構建流水線 68
Jenkins 檔案系統結構概覽 69
構建伺服器和基礎設施即代碼 70
按依賴順序構建 70
構建階段 71
可選的構建伺服器 72
校驗質量指標 72
構建狀態可視化 73
嚴肅對待構建錯誤 74
健壯性 74
總結 75
6 測試代碼 77
人工測試 77
自動化測試的優缺點 78
單元測試 80
一般的JUnit 和特殊的JUnit 81
一個JUnit 的例子 82
Mocking 82
測試覆蓋率 83
自動化集成測試 84
在自動化測試中使用Docker 84
Arquillian 85
性能測試 85
自動化接受測試 86
自動化GUI 測試 88
在Jenkins 中集成Selenium 測試 89
JavaScript 測試 90
測試後端集成點 91
測試驅動開發 93
REPL(互動式命令行)驅動開發 93
一個完整的自動化測試場景 94
人工測試web 套用 94
運行自動化測試 97
查找缺陷 98
測試巡禮 98
用Docker 處理棘手的依賴 102
總結 103
7 部署代碼 105
為什麼有這么多的部署系統 105
配置基礎作業系統 106
描述集群 107
為系統交付包 107
虛擬化棧 109
在客戶端執行代碼 111
有關練習的注意事項 111
Puppet 伺服器和Puppet 代理 112
Ansible 113
PalletOps 117
用Chef 做部署 117
用SaltStack 做部署 118
從執行的模型來比較Salt、Ansible、Puppet 和PalletOps 120
Vagrant 121
用Docker 做部署 123
對比表 124
雲計算解決方案 124
AWS 125
Azure 126
總結 126
8 監控代碼 127
Nagios 127
Munin 134
Ganglia 138
Graphite 142
日誌處理 144
客戶端日誌類庫 145
ELK 147
總結 149
9 問題跟蹤 151
用問題跟蹤器做什麼? 151
工作流和問題的一些例子 152
我們需要從問題跟蹤器里得到什麼? 154
問題跟蹤器激增所帶來的問題 157
所有的跟蹤器 158
Bugzilla 158
Trac 164
Redmine 172
GitLab 問題跟蹤器 178
Jira 181
總結 183
10 物聯網和DevOps 185
IoT 和DevOps 簡介 185
從市場的角度看物聯網的未來 188
機器到機器的通信 190
物聯網的部署影響軟體架構 191
物聯網部署的安全性 191
好啦,但是DevOps 和物聯網有什麼關係? 192
DevOps 的物聯網設備動手實驗室 193
總結 199
作者簡介
Joakim Verona是一位擅長持續交付和DevOps的諮詢師。自1994年以來,在系統開發的所有方面他都曾工作過。他積極地在諸如web系統、多媒體系統和軟硬體混合系統等複雜的多層系統上做出了領導實踐者的貢獻。自2004年以來,他廣泛的技能興趣把他導向了新興的DevOps領域。
Joakim在林雪平理工學院完成了計算機科學的碩士學位。他也曾作為諮詢師工作在各種各樣的工業領域上,例如銀行和財務、電信、工程、印刷和排版,還有遊戲開發。他也對敏捷領域感興趣,是一位Scrum認證的敏捷教練、Scrum產品負責人並擁有Java認證。
【譯者介紹】
高清華:悅跑圈資深研發工程師。工作十多年以來,在簡潔代碼、自動化測試、持續集成、DevOps等方面都有著豐富的經驗。曾在ThoughtWorks任職多年,從事敏捷軟體開發、DevOps諮詢等工作。
馬博文,ThoughtWorks Senior Consultant,Senior DevOps,西安DevOps Meetup發起人。AWS Certified Solution Architect/Certified Developer。《Scala Cookbook》譯者。熟悉Web/Ruby/Java/Scala開發,目前專注DevOps,持續交付,容器技術,微服務,AWS等。