博客 / 詳情

返回

解決流水線瓶頸、提升編碼效率的五個方法(下篇)

在《CI/CD | 解決流水線瓶頸、提升編碼效率的五個方法(上篇)》中,CloudBees公司產品營銷經理Samantha Frost介紹了能夠優化軟件開發團隊流水線的兩個解決方案。本篇文章將為大家帶來餘下三個挑戰的解決方案。在文章的結尾處,還將介紹她選擇的解決方案。

我們所面臨的挑戰是相當普遍的,我們選擇的解決方案解決了這些問題,並且取得了可衡量的成功,讓每個人都很開心。希望你也能在其中得到啓發,為自己面臨的挑戰找出適合的解決方案。

挑戰3:排查流水線執行問題(又名:無窮無盡地篩查日誌...)

即使對流水線配置進行了全面的測試和驗證,它們也始終有可能無法按預期運行。當出現問題時(例如無法完成構建,或耗時比預期長得多),解決問題的責任就落到了開發人員身上。

在傳統的CI環境中對流水線執行問題進行故障排查並不是很高效的方式。通常需要開發人員檢查構建日誌或CI控制枱界面,以追溯構建問題的根源。這意味着需要進行上下文切換,會對編碼工作造成很大的干擾。

我們的解決方案是利用源代碼管理(SCM)報告功能,自動將構建問題的信息推送到GitHub或BitBucket中。我們還使用了Slack插件,將定向消息直接發送給提交與CI作業關聯代碼的開發人員。因此,只有那些需要了解構建問題的開發人員才會收到通知,不會分散其他開發人員的注意力。其他的好處是,Slack插件還可以將構建信息推送到Slack。

結果如何呢?我的開發人員可以在不離開他們主要編碼環境的情況下,跟蹤構建狀態並發現問題。我們減少了開發人員看到的通知,降低了對他們的干擾,這意外地節省了很多時間!

挑戰4:管理流水線依賴關係(又名:使用事件驅動流水線進行跨團隊協調)

CI流水線並不是孤立存在的。在許多情況下,一個流水線可能需要等待另一個流水線完成才能運行。傳統CI環境中,流水線依賴關係的挑戰在於開發人員必須手動跟蹤多個流水線的狀態,並根據狀態手動觸發新的作業。手動監控流水線不僅乏味,還會讓開發人員分心,因為他們更願意專注於編碼工作。

為此,我們考慮了一個工具,可以從我們的CI流程中消除這種手動環節,無論他們在哪個團隊。我們使用了跨團隊協作(Cross Team Collaboration)功能,該功能可以通過在一個流水線中生成通知事件,然後將通知與其他流水線共享,從而實現了流水線之間的協調。

例如,我們有一個生成JAR文件的流水線。這個JAR文件被另一個流水線用於完成一個獨立的任務。通過使用跨團隊協作(Cross Team Collaboration),我們在第一個流水線中配置了一個基於代碼的事件通知,然後在第二個流水線中配置了一個基於事件通知的觸發器。這就是一個完全自動化的解決方案,將這兩個這兩個流水線連接了起來。當JAR文件準備就緒時,不需要依賴管理第一個流水線的團隊來通知,每個流水線都可以保持同步並自動執行。我不知道你是否經歷過這種情況,但我們經常因為更新名稱,而需要更新路徑。由於這個簡單的更改,我們遇到了許多“路徑未找到”的錯誤,這是非常令人抓狂的。基於事件的觸發器讓流水線可以相互監聽,對我們來説是一個完美的解決方案。

挑戰 5:構建基礎設施的低效利用(又名:媽媽説得對,離開房間要關燈!)

在理想的情況下,企業中的每個CI實例只在必要時處於活動狀態。當沒有構建任務需要運行時,它會自動關閉或休眠,從而將基礎設施資源提供給其他流水線使用。

在現實中,控制資源消耗是很困難的。開發人員通常會讓CI實例保持活動狀態,即使在不需要時也是如此,而底層的基礎設施平台(如Kubernetes)沒有自動的方法來知道何時應該關閉實例。結果是,真正需要資源的工作得不到資源(也就是,產生了大量關於缺乏容量的抱怨)。此外,我們還得為不需要的基礎設施買單。你會為此與簽署預算的副總裁進行“有趣”的對話,然後轉身將這種“有趣”的對話帶回你的團隊。這是不應該發生的,尤其是在如今自動化CI的時代。

我們的解決方案是使用休眠功能,自動在一段預定義的不活躍期後關閉或休眠CI實例。為了設置該功能,我們在Kubernetes集羣(用於配置託管控制器)的Helm圖表中啓用了它。我們配置了自動休眠,並通過界面跟蹤休眠的託管控制器的狀態。通過自動關閉不活躍的託管控制器,開發人員將這些控制器佔用的資源釋放出來,以供實際處於活動狀態的控制器使用。結果是構建更快了,因為每個構建都有更多的內存和CPU資源。

此外,當不活躍的託管控制器關閉或休眠時,Kubernetes可以自動縮減其總節點數。這降低了企業的基礎架構成本。並減少了與支付賬單的人不愉快對話的次數。

將這一切做成完整的解決方案

CI軟件應該幫助開發人員更快,更高效地工作。但是,當開發人員不得不花費大量時間手動設置、修改和排查CI流水線時,這些工具可能會變成更加麻煩的存在,成了分散開發人員注意力、引發開發人員挫敗感的根源,而他們更願意投入時間編寫代碼。

為了解決我們面臨的五個挑戰,我們利用了CloudBees CI功能,如流水線模板、流水線模板目錄、配置即代碼、上下文反饋、跨團隊協作和休眠託管控制器。

我們整體解決方案的經驗是,它將我們的CI軟件從一種負擔變成了開發人員生產力的引擎。最終的結果是在更短的時間內向客户交付更多的價值,開發人員滿意度也更高了,因為高效的CI意味着開發人員可以專注於他們喜歡和擅長的事情——寫代碼。

作者:薩曼莎·弗羅斯特(Samantha Frost),CloudBees公司產品營銷經理。

文章來源:https://www.cloudbees.com/blog/lets-get-back-to-coding-5-appr...

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.