嗨~歡迎閱讀全端開發雙週報第 23 期。在全端雙週報第 20 期當中,我們從歷史的角度回顧,聊了 CI/CD 的緣由,也談了什麼是 CI 與 CD。在這一期我們將進一步聊 CI/CD 具體的流程會如何進行。
[後端] CI/CD 中的 CI 流程中該包含什麼?
還記得先前提到,我們提到 CI 是持續整合,意思是讓多個開發者,能夠共同在同個程式碼庫中開發不同的新功能,然後能夠持續整合到某個分支上面。之所要持續做這件事,是因為開發不同功能時,程式碼可能會有衝突,而持續地整合就能及早化解衝突。
一般來說,CI 流程會在程式碼推到遠端分支後開始。現代的 CI 工具,會在程式碼推到遠端分支後,由 CI 的伺服器完整跑過整個 CI 流程。而現代軟體開發團隊的 CI 流程,做的不僅僅是確保程式碼合併沒有衝突。大家可以稍微回想一下,在自己的程式碼被部署之前,還會做什麼?
多數人應該第一直覺會說是 Code Review。而在 Code Review 之前有許多能夠自動化被檢查的東西,也會被放在 CI 的流程中。舉例來說,常見的包含程式碼格式化檢查、程式碼靜態檢查。
程式碼格式化檢查在做的事情,是統一程式碼的格式規範,例如 JavaScript 的 Prettier。很多工程師會喜歡用兩格縮排,另外有些人喜歡四格,與其在 Code Review 花時間爭論要兩格還是四格,團隊可以直接有規範,然後在 CI 的時候用格式化檢查的工具,來掃過程式碼,確保每個有符合團隊設定的格式風格。
同樣地靜態檢查工具,會對程式碼做靜態分析,然後掃過程式碼,確保有符合團隊所設立的相關規則,或者有符合程式語言的規則。舉例來說,TypeScript 的 TSLint 會幫忙檢查程式碼是否符合 TypeScript 的規則。很多工程師自己沒注意到的,很可能在靜態檢查被找出來,這能避免有問題的程式碼被合併。
除了上面提到的兩項檢查,多數團隊也會在 CI 流程中,加入自動化測試的環節。包含單元測試、整合測試、E2E 測試,如果新推到遠端分支的程式碼,沒有通過任一項測試,CI 工具就會報錯,並且推送通知給相關人員。透過這方式,我們能確保程式碼在合併前,有經過完整的測試,這樣能確保程式碼的正確性與品質有被兼顧到。
當然除了上面提到的這些各類檢測,CI 中的最重要環節之一,是確保程式碼能夠被編譯以及建構。為了確保不會浪費運算資源,通常會是在上面這些檢測都通過後,才會建構。而要能順利被建構,程式碼才能被部署。
在業界,許多軟體開發團隊會在 CI 當中加入其他更精細的檢測,例如針對安全 (security) 做檢測,避免寫出有潛在漏洞的程式碼;或者對效能 (performance) 做檢測,來確保程式碼的效能有達到一定的門檻。你可以針對團隊的需求,在 CI 中加入各類自動化做的檢測,確保團隊的工程品質能維持。
而回到 CI 最核心的作用,是透過自動化的方式,讓工程師可以在把程式碼推到遠端分支後,不用自己手動,就能完成這些重要的檢測,並完成程式碼的整合。
[E+ 成長計畫]
在往下讀本期推薦的連結前,想與最近雙週報的新讀者們分享,ExplainThis 籌劃的 E+ 成長計畫,每週會有一篇深度內容,由四個主題輪流,包含前端、後端、軟體工程,以及成為高效工程師。如果你覺得雙週報內容對你有幫助,E+ 將能帶給你更深度的內容。
除此之外,E+ 也有直播工作坊、社群活動 (最近正在舉行每日刷題練習的打卡活動)。如果你是剛開始軟體工程師的工作,或者目前是中階工程師想要邁向資深,歡迎加入與 300+ 位工程師一同成長。
E+ 的連結見此 [連結]。
[本期推薦]
最近發現一個叫 William Candillon 的開發者經營的 YouTube 頻道,專門講用 React Native 做一些各種產品常見的 UI,影片的品質非常高。推薦寫 React Native 的人可以一看 [連結]
Figma 的技術部落格這篇《How we engineer feedback at Figma with eng crits》談 Figma 建立的 Eng Crits 如何協助在技術設計前,收到更多回饋 [連結]
過去談到在 JavaScript 做 immutable 操作,多數人第一個會想到 Immer。最近看到另一個開源專案 Mutative,以更快更有效率的方式幫助你寫 immutable 操作。如果有相關需求的人,可以參考 [連結]
Tailwind 出了 v4-alpha,並且寫了一篇詳細的文章,介紹 v4 帶來的升級,讓人非常期待 [連結]
TanStack 過去推出非常多有名的工具,包含原本是 React Query 後來延伸到支援各個框架的 TanStack Query。最近 Tanstack 推出完整的框架 [連結],如果你過去已經大量用 TanStack 的工具,未來新專案或許可以考慮直接用 TanStack 框架
如何從面試後全數感謝函,轉為拿 5 個 offers?上週 ExplainThis 收到一個來自讀者的好消息。去年 12 月有位讀者參與我們的諮詢與模擬面試,原因是他找第一份軟體開發的工作,投了超過百間的公司,拿到個位數面試,最後全部收到感謝函。去年底我們分了兩次先協助調整履歷,後來在模擬面試協助該讀者調整準備方式;在上週,該讀者來信跟我們說,他接受了新工作,而自從去年 12 月的調整後,今年初他順利拿到 5 個 offers。關於中間做的調整,可以詳見此篇 [連結]
Y Combinator 創辦人 Paul Graham 除了以電腦科學家、創業家的身份聞名於世,他同時有個為人稱道的身份 — essayist,他寫過許多經典的文章,啟發了世界上無數的人。他最新寫的《The Best Essay》一文,再次覺得受益良多,非常推薦對於寫內容感興趣的人一讀 [連結]
過去一週在軟體工程師社群最多討論的話題之一,莫過於 Cognition Labs 推出的 AI 軟體工程師 Devin。與 Devin 同樣高討論度的,是展示 Devin 的 Scott Wu。Scott 從 12 歲開始寫程式,14 歲開始打程式比賽,然後 2012 到 2014 連續三年拿奧林匹亞資訊金牌,甚至 2014 年是以 100% 全對拿到排名第一。先前被問到給想開始寫程式的人有什麼建議,Scott 說他建議:「就去嘗試吧。網路上有非常多的資源,去找然後開始學。你可以直接在 Google 搜尋『學習如何寫程式』,應該會出現成百上千個網站,提供你所需的學習資源。剩下的就差你自己鼓起勇氣去試了。程式戰鬥營或任何學習方式,只能你能投入下去做都很好。」[連結]
求職時遇到「回家作業類」關卡要特別小心。上個月在推特 (X) 上面,有一位設計師出來踢爆,眾多名人使用的 Eight Sleep 疑似透過「回家作業類」面試關卡,來讓設計師們做免費的設計。她出來踢爆後,有許多面試過 Eight Sleep 的人也出來分享,說有相同的遭遇,其中也包含軟體工程師 [連結]
史丹佛大學商學院 (Stanford GSB) 釋出了 NVIDIA 創辦人兼 CEO 黃仁勳的對談影片。國外網友節錄了黃仁勳在對談中提到的觀點,其中有兩項我們也覺得特別有啟發性。第一個觀點是關於選擇做的事情,很多人可能會感到人生迷惘、不知要選擇做什麼。黃仁勳的這個觀點,雖然是在談論公司的方向選擇,但對於人生方向選擇,也很受用。他說「你希望公司在別人能做的事情上懶惰,如果別人能做,就讓別人做吧。我們該選擇去做的事情是:如果我們不做,世界就將分崩離析;如果我不做,這件事就不會被完成 [連結]