返回文章列表

DevOps實踐核心要素與文化變革

本文探討DevOps 的核心要素與實踐方法,涵蓋自動化、安全佈署、事後檢討與文化變革等關鍵導向,並提供 Python 程式碼範例,說明如何建立自定義監控指標、定義警示標準及自動化審核流程,協助團隊克服匯入DevOps 的挑戰,實作成功的 DevOps 轉型。

DevOps 軟體工程

DevOps 的核心價值在於消除開發與營運團隊之間的隔閡,透過協作、自動化、持續監控及分享機制,提升軟體開發和交付效率。實踐 DevOps 的關鍵在於建立自動化流程,包括程式碼建置、測試、佈署和監控,並匯入有效的監控指標和警示機制,確保系統穩定性。此外,安全佈署策略,例如非工作時間佈署、功能標誌和自動化佈署Pipeline,也是不可或缺的環節。更重要的是,團隊需要建立事後檢討機制,從錯誤中學習並持續改進,同時推動文化變革,促進團隊成員間的資訊分享和協作,才能真正發揮 DevOps 的效益。

DevOps 的核心要素與實踐

1. DevOps 的定義與歷史

DevOps 是一種結合開發(Development)與營運(Operations)的文化與實踐,旨在提升軟體開發與交付的效率和品質。DevOps 的歷史源自於對傳統軟體開發流程中開發與營運部門之間壁壘的反思,強調協作、自動化、衡量和分享(CAMS)的四大支柱。

2. 家長式管理的弊端

在傳統的軟體開發與交付流程中,存在著一種被稱為「家長式管理症候群」(The Paternalist Syndrome)的現象。這種現象體現在過度的審核和控制,不僅阻礙了團隊的自主性和創新能力,也降低了軟體交付的速度和品質。

2.1 自動化解決方案

為瞭解決家長式管理的弊端,自動化成為了一種有效的解決方案。透過自動化審核流程、通知流程和錯誤處理,可以減少人工干預,提高效率,降低錯誤率。

import logging

# 設定日誌紀錄
logging.basicConfig(level=logging.INFO)

def approval_process():
    try:
        # 審核流程自動化
        logging.info("開始審核流程")
        # 模擬審核流程
        approval_status = True
        if approval_status:
            logging.info("審核透過")
            return True
        else:
            logging.info("審核未透過")
            return False
    except Exception as e:
        logging.error(f"審核流程發生錯誤:{e}")
        return False

# 執行審核流程
approval_process()

#### 內容解密:

  1. 日誌紀錄設定:使用 logging.basicConfig 設定日誌紀錄的等級為 INFO,以便記錄審核流程中的重要資訊。
  2. 審核流程自動化:定義 approval_process 函式來模擬審核流程,透過 try-except 區塊處理可能發生的錯誤。
  3. 錯誤處理:若在審核流程中發生錯誤,將錯誤資訊記錄到日誌中,以便後續追蹤和處理。

3. 營運盲點

營運盲點(Operational Blindness)是指在軟體開發和營運過程中,由於缺乏對系統運作狀態的深入瞭解而導致的問題。為瞭解決這個問題,需要建立自定義的監控指標,以更準確地反映系統的健康狀態。

3.1 建立自定義監控指標

建立自定義監控指標需要考慮系統的關鍵效能指標(KPI),例如回應時間、錯誤率等。透過這些指標,可以更有效地監控系統的運作狀態。

import time

def monitor_system():
    # 模擬系統監控
    response_time = time.time()  # 取得目前時間作為回應時間
    error_rate = 0.05  # 模擬錯誤率
    
    # 建立自定義監控指標
    metrics = {
        "response_time": response_time,
        "error_rate": error_rate
    }
    
    return metrics

# 執行系統監控
metrics = monitor_system()
print(metrics)

#### 內容解密:

  1. 模擬系統監控:使用 time.time() 取得目前時間作為回應時間,並設定一個模擬的錯誤率。
  2. 建立自定義監控指標:將回應時間和錯誤率封裝成一個字典(metrics),以便於管理和查詢。
  3. 輸出監控結果:列印出 metrics 字典,顯示目前的系統監控狀態。

4. 警示疲勞

警示疲勞(Alert Fatigue)是指由於過多的警示導致團隊成員對警示的反應變得遲鈍甚至忽略警示的現象。為瞭解決這個問題,需要最佳化警示的定義和傳遞方式。

4.1 定義有效的警示標準

定義有效的警示標準需要考慮警示的緊急程度和重要性,避免產生過多不必要的警示。

def define_alert_criteria(metric_value, threshold):
    if metric_value > threshold:
        return True  # 超過閾值,觸發警示
    else:
        return False  # 未超過閾值,不觸發警示

# 設定閾值和目前指標值
threshold = 0.1
metric_value = 0.2

# 定義警示標準
alert_triggered = define_alert_criteria(metric_value, threshold)
print(f"是否觸發警示:{alert_triggered}")

#### 內容解密:

  1. 定義警示標準函式:使用 define_alert_criteria 函式根據目前的指標值和設定的閾值來決定是否觸發警示。
  2. 設定閾值和指標值:設定一個閾值(threshold)和目前的指標值(metric_value)。
  3. 判斷是否觸發警示:根據比較結果,決定是否觸發警示,並輸出結果。

DevOps 實踐:打破技術與文化壁壘

在當今快速變化的科技環境中,DevOps 已成為企業提升競爭力的關鍵因素。然而,許多組織在匯入 DevOps 時面臨諸多挑戰,包括技術限制、文化阻礙和資源匱乏等。本篇文章將探討 DevOps 的實踐方法,幫助讀者瞭解如何克服這些挑戰並實作成功的 DevOps 轉型。

自動化:DevOps 的核心驅動力

自動化是 DevOps 的核心要素之一,涵蓋了從程式碼構建、測試到佈署的整個流程。透過自動化,團隊可以減少手動錯誤、提高效率並加快交付速度。

自動化的目標與優先順序

  1. 定義自動化目標:明確自動化的目標和範圍,確保與業務目標一致。
  2. 優先排序:根據任務的重要性和緊急程度,優先處理自動化工作。
  3. 培訓與學習:提供足夠的時間和資源,讓團隊成員學習新的自動化技能。

填補技能缺口

  1. 技能評估:評估團隊的現有技能,並找出與 DevOps 實踐所需的技能差距。
  2. 培訓與發展:制定培訓計劃,提升團隊成員的技能和知識。
  3. 外部資源:必要時引入外部專家或顧問,提供專業指導和支援。

安全與佈署

在 DevOps 實踐中,安全性和佈署策略至關重要。安全的佈署流程可以減少風險並確保系統的穩定性。

非工作時間佈署

  1. 佈署層級:瞭解佈署的各個層級,包括預生產環境、生產環境等。
  2. 佈署頻率:提高佈署頻率可以減少恐懼並提高團隊的信心。
  3. 風險管理:透過功能標誌、車隊回復和資料函式庫級別的回復等策略,降低佈署風險。

自動化佈署Pipeline

  1. 建立佈署工件:利用包管理工具建立和管理佈署工件。
  2. 組態管理:確保組態檔案的正確性和一致性。
  3. 安全安裝:透過自動化指令碼安全地安裝新應用程式。

事後檢討與文化變革

事後檢討是 DevOps 實踐中的重要環節,透過檢討可以總結經驗、改進流程並提升團隊的韌性。

有效的事後檢討

  1. 建立心理模型:透過事後檢討建立事件的心理模型,加深理解。
  2. 24小時規則:在事件發生後24小時內進行初步檢討,確保及時處理。
  3. 定義行動專案:明確行動專案並跟進執行結果。

打破資訊壟斷

  1. 資訊分享:鼓勵資訊分享,打破資訊壟斷。
  2. 檔案管理:建立有效的檔案管理機制,確保資訊的易獲性和可讀性。
  3. 溝通策略:制定有效的溝通策略,確保資訊的傳遞和理解。

文化變革與人才匹配

DevOps 不僅僅是技術的變革,更是文化的變革。企業需要培養適合 DevOps 文化的團隊,並透過文化變革推動業務成功。

文化變革的實踐

  1. 定義文化價值:明確企業的文化價值觀,並透過儀式和語言強化這些價值。
  2. 人才匹配:尋找和培養符合企業文化的人才。
  3. 面試與評估:在面試和評估過程中,注重候選人的文化適應性和技術能力。

結語

DevOps 是一段迭代的旅程,不同企業的實踐路徑可能有所不同。透過自動化、安全佈署、事後檢討和文化變革等實踐,企業可以克服挑戰並實作成功的 DevOps 轉型。希望本篇文章能為讀者提供有價值的參考和指導。

致謝

在我的生命中,有許多人以各種方式對這本文做出了貢獻。無論貢獻大小,我都深表感謝。首先,我要感謝我最大的粉絲、我最好的朋友和我的人生伴侶。我的妻子史蒂芬妮(Stephanie)在我缺席、沮喪和懷疑時,仍然以支援、愛和理解陪伴我。你是我的依靠,這本文的誕生離不開你。我深深地愛著你。

我還要感謝我的母親伊芙琳(Evelyn),感謝她為我做的一切。她看到了我對電腦的熱愛並鼓勵我。她犧牲了我們的家庭預算,為我買了第一台電腦。當我長時間佔用電話線時,她沒有生氣。她教導我辨別對錯。當我太尷尬而不敢自我吹噓時,她為我感到驕傲。她讓我在教堂裡站起來演講,並做了許多其他讓我當時討厭但塑造了今日的我的事情。我永遠感激她。

對於我的妹妹格洛裡亞(Gloria),她總是在我身邊支援我。你承擔了我們家庭的重擔,你的心胸寬廣,你的愛無邊無際,以至於你沒有意識到它的存在。讓我印象深刻的不是你的無私,而是你表現出來的自然與毫不費力的關懷。你是我每天努力成為更好的人的榜樣。

對於我的高中數學老師黛比·麥克斯韋(Debbie Maxwell),無論我給你多少理由放棄,你從未放棄我。因為你的指導、支援和持續的信任,我才得以高中畢業。謝謝你。

最後但同樣重要的是,我要感謝我的第一任經理和導師米奇·麥克唐納(Mickey McDonald)。你看見我閱讀一本關於TCP/IP的書,儘管我幾乎無法理解它,但你仍然給了我機會。你僱傭了一個在資料輸入部門工作的黑人小子,沒有正式的教育背景,沒有正式的培訓,但有大量的渴望。你幫助改變了我的生活。

我還要感謝曼寧(Manning)出版社的優秀團隊,讓這本文得以出版。特別感謝發展編輯託尼·阿里托拉(Toni Arritola)的耐心和支援。還要感謝技術發展編輯卡爾·蓋奧哈根(Karl Geoghagen)的審閱和反饋。感謝審稿編輯亞歷山大·德拉戈薩夫列維奇(Aleksandar Dragosavljevic)、專案編輯戴爾德麗·希亞姆(Deirdre Hiam)、文字編輯莎朗·威爾基(Sharon Wilkey)、校對凱瑞·海爾斯(Keri Hales)和排版戈登·薩利諾維奇(Gordan Salinovic)。

對於所有的審稿人,你們的建議讓這本文變得更好:亞當·溫德爾(Adam Wendell)、阿蘭·函式庫尼奧(Alain Couniot)、安德魯·函式庫爾特(Andrew Courter)、阿西夫·伊克巴爾(Asif Iqbal)、克里斯·維納(Chris Viner)、克里斯蒂安·圖達爾(Christian Thoudahl)、克利福德·瑟伯(Clifford Thurber)、科林·喬伊斯(Colin Joyce)、康納·雷德蒙德(Conor Redmond)、丹尼爾·蘭布林(Daniel Lamblin)、道格拉斯·斯帕林(Douglas Sparling)、埃裡克·普拉頓(Eric Platon)、福斯特·海恩斯(Foster Haines)、格雷戈裡·雷謝特尼亞克(Gregory Reshetniak)、伊曼諾爾·瓦連特(Imanol Valiente)、詹姆斯·伍德拉夫(James Woodruff)、賈斯汀·函式庫爾斯頓(Justin Coulston)、肯特·R·斯皮爾納(Kent R. Spillner)、馬克斯·阿蒙特(Max Almonte)、米歇萊·阿杜奇(Michele Adduci)、米洛拉德·因布拉(Milorad Imbra)、理查德·託比亞斯(Richard Tobias)、羅曼·列夫琴科(Roman Levchenko)、羅曼·巴甫洛夫(Roman Pavlov)、西蒙·塞亞格(Simon Seyag)、斯拉沃米爾·富爾曼(Slavomir Furman)、斯蒂芬·古德曼(Stephen Goodman)、史蒂夫·阿丘(Steve Atchue)、託爾斯滕·韋伯(Thorsten Weber)和洪偉卓(Hong Wei Zhuo)。

關於這本文

《維運反模式,DevOps解決方案》旨在幫助個人貢獻者和團隊負責人開始一系列行動,以實作DevOps轉型。它首先建立了任何DevOps轉型的基礎支柱,並嘗試在這些背景下構建組織問題。

誰應該閱讀這本文

這本文導向技術團隊中維運或開發方面的工程師。它針對團隊負責人和個人貢獻者。高層管理者和高階長官者會在這本文中找到許多有用的見解,但書中概述的解決方案和方法考慮到了讀者的有限角色。組織中更高層的長官者將擁有更廣泛的工具,這些工具不在本文的討論範圍內。

如果您是一位希望實施DevOps的高管,這本文將有所幫助,但並不完整。作為高管,您擁有遠超於我的目標讀者的文化變革權力。雖然我仍然建議閱讀這本文(並為您的每位員工購買一本,或作為禮物送給您的朋友和家人),但如果不指出其他考慮到您作為變革推動者的強大權力的書籍,我將失職。兩個不錯的選擇是Gene Kim、Kevin Behr和George Spafford合著的《鳳凰專案》(IT Revolution Press,2018年)和Gene Kim、John Willis、Patrick Debois和Jez Humble合著的《DevOps手冊》(IT Revolution Press,2016年)。

本文的組織結構:路線圖

本文圍繞組織中常見的一系列反模式進行組織。每章首先定義反模式,並開始解釋逆轉這些模式的方法和解決方案:

  • 第1章討論了DevOps組織的基本要素,並建立了DevOps社群中的共同術語。
  • 第2章介紹了第一個反模式——家長式綜合症,並探討了低信任度組織的影響。它探討了流程中守門人的角色及其對變革速度的影響。本章探討了自動化這些守門人問題的方法,以增強員工權能並安全地提高變革率。
  • 第3章描述了維運盲點反模式,並討論了對系統進行維運視覺化的必要性。它透過系統理解、資料和指標來確認系統是否按預期工作。
  • 第4章涵蓋了資料而非資訊的反模式。它討論瞭如何構建和呈現資料,使其對受眾更有用。有時資料是有用的,但其他時候需要以某種方式呈現,以傳達特定的故事。
  • 第5章介紹了品質如同調味品的反模式,並討論了確保系統品質是所有單個成分的一部分的必要性。在流程的最後階段試圖確保品質會導致某種品質表演。
  • 第6章定義了警示疲勞反模式。當團隊支援生產系統時,他們經常設定一系列警示。但當這些警示嘈雜且不總是需要補救時,它們可能會造成危害。本章透過在警示建立中更加審慎,並瞭解警示的真正目標,來討論解決這種情況的方法。
  • 第7章解釋了空蕩蕩的工具箱反模式。隨著團隊在其角色或職責方面的擴充套件,重要的是要投入時間和精力於他們用來執行這些職責的工具。在沒有相應工具支援的情況下增加責任感,會導致團隊因執行重複性任務而整體放緩。
  • 第8章提出了非工作時間佈署反模式,並討論了圍繞佈署過程的恐懼。本章不是管理這種恐懼,而是討論如何透過改進佈署過程來建立安全的過程。透過使用自動化,可以建立具有明確回復檢查點的可重複佈署過程。
  • 第9章涵蓋了浪費一次完美事故的反模式。許多事故得到解決,但從未被討論。事故發生在我們對系統的理解與系統的現實相碰撞時。本章提供了一個結構化的流程來從事故中學習,並防止未來發生類別似事件。

DevOps 的組成要素

假設在某個星期五的晚上 11:30,IT 維運經理 John 收到了來自辦公室的電話鈴聲,這個鈴聲是他事先設定好的,以便他能立即辨認出是來自辦公室的電話。電話那頭是軟體開發團隊的高階開發人員 Valentina,她報告說生產環境出現了問題。

最近一次軟體釋出包含了新的功能,這些功能改變了應用程式與資料函式庫的互動方式。然而,由於測試環境的硬體資源不足,整個應用程式在釋出前並未進行完整的測試。當晚 10:30 左右,一個每季度才執行一次的排程任務開始執行。這個任務在測試階段被遺漏了,即使它沒有被遺漏,測試環境中的資料量也不足以進行準確的測試。

Valentina 需要停止這個程式,但她沒有存取生產伺服器的許可權。她花了 45 分鐘在公司內部網站上查詢 John 的聯絡資訊,因為 John 是她認識的唯一具備生產環境存取許可權的人。

本章涵蓋以下主題:

定義 DevOps

介紹 CAMS 模型

在開始探討 DevOps 的具體實踐之前,我們首先需要了解 DevOps 的基本定義和相關模型。DevOps 是一種文化和實踐的結合,旨在改善開發(Development)和維運(Operations)團隊之間的協作,從而實作更快速、更可靠的軟體交付和佈署。

DevOps 的核心概念

DevOps 的核心在於打破開發和維運之間的隔閡,透過建立一種協作文化、自動化流程和工具鏈,來提高軟體開發和交付的效率。這包括持續整合(Continuous Integration)、持續交付(Continuous Delivery)和持續監控(Continuous Monitoring)等實踐。

CAMS 模型

CAMS 模型是 DevOps 的一個重要框架,它代表了 DevOps 的四個關鍵要素:

  • Culture(文化):強調團隊之間的協作和分享責任的文化。
  • Automation(自動化):透過自動化工具和流程來提高效率和減少錯誤。
  • Measurement(衡量):透過監控和測量來瞭解系統的表現和找出改進的機會。
  • Sharing(分享):鼓勵團隊之間分享知識、經驗和最佳實踐。

透過 CAMS 模型,組織可以更好地理解和實施 DevOps,從而實作更高效的軟體開發和維運。

為何 DevOps 至關重要

在當今快速變化的技術環境中,企業需要能夠快速回應市場變化和客戶需求。DevOps 提供了一種實作這一目標的方法,透過改善開發和維運團隊之間的協作,企業可以更快地交付高品質的軟體,從而獲得競爭優勢。

實施 DevOps 的挑戰

雖然 DevOps 帶來了許多好處,但其實施也面臨著諸多挑戰,包括文化轉變、技術選型、流程改造等。組織需要根據自身的具體情況,逐步推進 DevOps 的實施。