4.4 自動化與自助化
我們先從自動化講起。自動化可以節省時間,因為機器比人做得快;自動化可以節省成本,因為不需要為機器付工資;自動化可以帶來可重復性,因為機器嚴格按照人預先編排好的方法來執行;自動化可以完備記錄當時的執行情況,便于將來追溯、排查和審計。所以凡是有明確規則的、只要按照規則來執行和判斷就可以的活動,都應該考慮實現自動化。
4.4.1 單項活動的自動化
對于單項活動的自動化,比如自動化構建、自動化安全掃描、自動化部署、自動化測試、自動化監控,要盡量提高自動化的程度。以部署為例,在各臺服務器上執行腳本部署,這實現了一定程度的自動化,而再進一步,則是要實現在工具平臺上一鍵完成部署。對于自動化測試,除了要關注測試執行的自動化,還要考慮測試腳本編寫本身一定程度的自動化,比如自動化生成一些框架性內容。
4.4.2 流程的自動化
對于流程的自動化,典型的持續交付流水線就是指把各項活動串起來,盡管其中有些活動本身可能還沒有做到自動化,比如人工審批環節。
當特性分支開發完成后,通過Pull Request或者Merge Request過程合入集成發布分支。如果Pull Request/Merge Request包含了一些流程控制,那么它也實現了某種流程的自動化。比如設置為,只有當特定評審人進行人工評審并通過,且自動觸發的構建、代碼掃描、單元測試等活動也執行通過時,才能算作Pull Request/Merge Request通過并完成合入。
OA(Office Automation,辦公自動化)語境下的工作流,比如“一次申請—審批—流轉—跟蹤—催辦”,也是某種流程的自動化。典型的,如一個申請線上變更的工單的流轉。當然,如果在審批通過后觸發自動執行變更,那么它就進而觸發了單項活動的自動化。
4.4.3 自助化
自動化工具要好用,其中比較重要的一點是,用戶可以方便地自行配置使用,也就是自助化。以應用部署為例,最基本的自動化是指由專職人員(這里指運維人員)登錄到服務器運行腳本,如果做得好,則應該是由普通使用者(通常指開發人員)做一些簡單的配置之后,每次點擊一下按鈕,就能完成部署全過程,將應用程序的新版本分批部署到各臺服務器上。
事實上,不僅是自動化工具要好用,實現自助化,而且凡是與軟件交付過程相關的軟件工具、軟件服務,也都應該操作便捷,實現自助化。
4.4.4 相關支持
為了能夠自助使用工具,對工具的使用權限應該適當放開。不要總是想著通過限定哪些人可以使用工具讓操作更安全,因為這會帶來不同角色之間溝通、協作的成本,是不得已才使用的方法;而是應該盡量通過使工具更容易掌握和使用,以及通過增加工具的防護措施來避免人為出錯,讓操作更安全。
另外,所有的軟件工具、軟件服務都要有明確的負責人來負責其運維工作,以保證其穩定性甚至高可用性。