91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GitHubflow你真的了解嗎?真正的敏捷工作流

454398 ? 來源:alpha007 ? 作者:alpha007 ? 2022-11-15 17:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:搜狐

7991 年,隨著極限編程(Extreme programming)方法論的提出,持續(xù)集成(Continuous integration)也隨之成為一項標(biāo)準化的敏捷實踐,被逐步應(yīng)用于各類軟件的開發(fā)流程中。

9102 年的今天,持續(xù)集成的概念已經(jīng)在軟件開發(fā)領(lǐng)域生根發(fā)芽,廣泛應(yīng)用于不同平臺及設(shè)備的項目開發(fā),極大提升了項目迭代速度,降低了維護成本。

不過,作為“敏捷”的固有屬性,持續(xù)集成也并不僅限于特定的模式,不同的項目可能遵循不同的實踐,形式多種多樣,效果可能也參差不齊。

為了解決這些問題,一些 Workflow 的通用模式被提出,而本文的主角,就是其中的天之驕子 —— GitHub flow。

GitHub flow 是什么?

GitHub flow,顧名思義,就是 GitHub 所推崇的 Workflow。(千萬不要理解成 GitHub 上才能用的 Workflow。)

其官網(wǎng)的描述為:

GitHub flow is a lightweight, branch-based workflow that supports teams and projects where deployments are made regularly.

從中我們可以得出的信息是 —— (這段描述完全就是廢話) GitHub flow 具有很高的通用性。

為了更便于了解 GitHub flow 的內(nèi)容,我們從流程入手

其中的主要流程為:

新建分支(Create a branch);

提交修改(Add commits);

創(chuàng)建PR(Open a Pull Request);

代碼評審(Discuss and review your code);

部署(Deploy);

合并(Merge);

細心的同學(xué)可能很快會發(fā)現(xiàn),GitHub flow 最大的亮點在于部署(Deploy)發(fā)生在 合并(Merge)之前,這就是 GitHub flow 的核心,非阻塞式集成 —— 在產(chǎn)生任何副作用之前得知當(dāng)前修改的所有集成效果,達到真正的持續(xù)集成。

GitHub flow 有什么優(yōu)勢?

GitHub flow 的核心優(yōu)勢在于其流程帶來的自動化可能性,能夠做到其它流程無法實現(xiàn)的檢查過程,并極大簡化開發(fā)團隊的體力勞動,真正發(fā)揮自身的價值。

主要體現(xiàn)在以下方面:

基于修改的檢查

基于修改的檢查(Change-based checking) 是相對于全局檢查(Global checking)的概念,最典型的例子就是代碼覆蓋率。項目中一般會設(shè)立覆蓋率的最低閾(yù)值,并在流水線中進行檢查。

根據(jù)著名的覆蓋率第一定律:

隨著時間的推移,項目中的實際覆蓋率必將會無限趨向于要求的覆蓋率?!?沃茲基碩德

如果項目中配置的最低要求是 90%(暫不考慮覆蓋率類型),那么就不要指望實際覆蓋率能夠超過 95%。于是問題來了,全局覆蓋率要求會導(dǎo)致什么樣的嚴重后果呢?

我們考慮一個假象項目,總共有 100 行代碼,覆蓋率要求 90%,實際覆蓋率 90%。有一天,項目組成員小明發(fā)現(xiàn)其中有 10 行無意義的 console.log(42),決定將其刪除。

學(xué)過初等數(shù)學(xué)的我們都知道,對于 0~1 之間的分數(shù),分子分母同時增加相同數(shù)值時,分數(shù)的值會增大;反之,分子分母同時減少相同數(shù)值*時,分數(shù)的值會減小。(這里要求結(jié)果仍然處于 0~1 之間。)

如果還不能反應(yīng)過來的話,可能要考慮補充六個核桃了。刪除無用代碼的結(jié)果是,覆蓋率不再滿足要求,從而無法通過流水線。

90/100 * 100% = 90.00%

80/90 * 100% = 88.89%

之后,小明可以作出以下幾種選擇:

撤銷之前的修改,保留無用代碼;

降低全局覆蓋率要求;

從其它覆蓋率不足的地方補充代碼覆蓋;

找到之前導(dǎo)致覆蓋率不足的人,要求其補充代碼覆蓋。

選項 1 固然是最簡單的方案,直接當(dāng)作無事發(fā)生。

選項 2 雖然也簡單,但是既然當(dāng)前覆蓋率能夠降到 90%,如果降低要求以后必然還會繼續(xù)下降,同時如果被其他人發(fā)現(xiàn)可能遭到質(zhì)疑(Challenge)。

選項 3 中一個覆蓋率不足的問題可能繼續(xù)分為兩種子類型:案例遺漏與非測試友好。前者是忽略了某種應(yīng)當(dāng)覆蓋的情況,而后者是代碼的設(shè)計本身導(dǎo)致無法合理測試。對于前者,如果缺乏上下文而直接把當(dāng)前行為當(dāng)作預(yù)期,可能會埋下錯誤隱患(如果未覆蓋當(dāng)前行為本身是未定義行為甚至錯誤行為);對于后者需要進行額外的重構(gòu),仍然具備前述問題(在測試覆蓋不足的情況重構(gòu)?),并且可能導(dǎo)致原問題遞歸(如果重構(gòu)本身減少了代碼量)。

選項 4 原則上是最正確的方案,但實際上可行性很低。如果小明找到小紅,告訴她一年前編寫的代碼覆蓋率不足,那么得到的回應(yīng)多半是:我當(dāng)年都跑得好好的,你一改動就掛了,不是你的問題是什么?

歸根到底,不論考慮哪種選項,對于小明而言,學(xué)到的只有一件事:

永遠不要做會減少代碼的修改!

永遠不要做會減少代碼的修改!

永遠不要做會減少代碼的修改!

一旦開發(fā)團隊中每個人都認識到這一點之后,之后的開發(fā)過程就會向著堆垃圾的方向發(fā)展:能不動原有代碼就不動,實在不行寫個 if插進去。提取公共代碼?雙倍的覆蓋就是雙倍的快樂安全,怎么能說不要就不要?

不過,一旦我們使用合并前集成(Integration before Merge)的方式,便能夠得知每個改動中每個文件的覆蓋率情況,從而在開發(fā)過程中主動避免覆蓋率下滑,把質(zhì)疑集中到問題的來源 —— 提交代碼并且覆蓋率不足的人身上。

非錯誤級反饋

非 GitHub flow* 的流水線中,永遠只存在一種反饋方式 —— 報錯。(為了保持簡潔,這里將所有不符合 Integration before Merge 的流程統(tǒng)稱為「非 GitHub flow」。)

這時候有人可能會說,我們可以向流水線的控制臺輸出里打印日志。不過我可以保證,沒有人會在正常構(gòu)建的情況下守著看完每一條日志,一個合理設(shè)計的流水線也不應(yīng)該需要主動關(guān)注這里的內(nèi)容導(dǎo)致不必要的效率浪費。

日志的內(nèi)容往往絕大部分都是非關(guān)鍵信息:

即便快速瀏覽日志,恐怕也很難發(fā)現(xiàn)關(guān)鍵信息。

不過,項目開發(fā)中往往存在很多非關(guān)鍵因素,平常不會太過關(guān)心,但一旦問題嚴重之后又會很麻煩。一個很好的例子就是應(yīng)用體積。假如開發(fā)過程中對體積毫不關(guān)心(內(nèi)網(wǎng)可能傳輸很快),那么等到用戶真正無法容忍加載時間而導(dǎo)致使用率急劇下降的時候,還得專門回過頭來做體積優(yōu)化*。(如果本身就是打算靠創(chuàng)造額外優(yōu)化工作賺錢的話,可以當(dāng)我沒說。)

通過 GitHub flow,我們能夠在合并之前得到所有相關(guān)的信息,并自行判斷問題的嚴重性(其他 Reviewer 也有義務(wù)判斷)。如果本次改動并沒有添加新的依賴,但是構(gòu)建后大小急劇增加,那么可能就需要檢查文件引用或者構(gòu)建過程存在問題。

由于是基于集成結(jié)果的信息提示,因此還可以設(shè)置出現(xiàn)條件,例如某文件體積變化超過 0.5%。這樣能夠避免被固定消息所打擾,只關(guān)心必要內(nèi)容。

除了自動執(zhí)行的被動檢查項目外,對于需要可觀成本的檢查,往往設(shè)計成主動檢查項目。一般通過 PR 的標(biāo)簽或者評論內(nèi)容進行觸發(fā),類似于:

性能測試(Performance testing) 就是一個較為典型的例子,如果小明不畏艱難險阻對實現(xiàn)代碼進行了深度重構(gòu),那么在合并前就必然選擇進行性能測試來避免非預(yù)期的影響。同理,如果只是添加了測試代碼,那么性能測試將完全沒有必要。

同樣的,Reviewer 也應(yīng)當(dāng)評估是否所需的主動檢查項目都被執(zhí)行。

無限環(huán)境

多團隊協(xié)作項目中,一個常見的痛點就是需要根據(jù)自身或者外部的需求準備各種環(huán)境,然而一些環(huán)境在大部分時候都不會使用到,往往需要在不明所以的情況下突然增加或者調(diào)整環(huán)境配置。

這時就可以回歸到 GitHub flow 的重中之重 —— 合并前部署。

所謂的無限環(huán)境,就是自動將當(dāng)前 PR 中的最新提交*部署到一個臨時環(huán)境中,并返回該環(huán)境的 URL 地址。(如果資源豐富的話也可能部署每一個提交以方便比對。)

為此,環(huán)境準備工作將變得非常簡單,只需要修改相應(yīng)配置文件并創(chuàng)建 PR,即可得到一個對應(yīng)的新環(huán)境。這一切甚至不需要依賴本地開發(fā)環(huán)境,而是直接在代碼平臺的在線編輯器中完成。

由于可以直接預(yù)覽當(dāng)前修改,不會再出現(xiàn)不必要的疑 車 蟲無據(jù)的情況,Reviewer 有任何懷疑時便可以直接在預(yù)覽環(huán)境中驗證,而非憑空猜疑。Reviewer 也可以放心大膽的驗證自己的懷疑,不需要在本地開發(fā)環(huán)境耗時耗力地切換。

有條件時甚至可以為預(yù)覽模式設(shè)定特殊構(gòu)建模式,例如高亮效果用于定位修改內(nèi)容:

這樣可以極大提升 Review 效率,降低 Reviewer 的負擔(dān)。

自動化工作流

項目開發(fā)中往往有大量的時間被浪費在等待。等待構(gòu)建、等待測試、等待 Review ……而這一切,都可以依靠 GitHub flow 來進行改善。

由于 PR 中能夠運行所有必要的檢查,所以本地開發(fā)環(huán)境中僅僅需要關(guān)注最可能受到影響的內(nèi)容(例如當(dāng)前文件的測試),而把其它不在固定影響范圍的檢查都轉(zhuǎn)交給 PR。由于 PR 的工作機制,即便存在沖突無法合并也不會導(dǎo)致 Push 失敗,并且 Push 本地代碼后便可以立刻關(guān)電腦走人,即便 PR 檢查失敗也不會有任何后果。

PR 中能夠利用 CI 環(huán)境,不受本機執(zhí)行能力限制,因此可以并行檢查所有需驗證項目:

這里的檢查本質(zhì)上仍然是 Code Review,只不過參與者不是自然人。

檢查期間,開發(fā)人員可以充分利用碎片時間處理其它事務(wù),而無需關(guān)心檢查進度。如果任何項目檢查失敗,將立刻收到郵件通知。

如果所有檢查項目均已通過并且當(dāng)前 PR 并非 Draft 狀態(tài)*,能夠自動通知 Reviewer 進行代碼 Review,并且在所有 Reviewer 同意后自動 Merge,在 Happy Path 下完全無需再次人工干預(yù)。

(Draft PR 是 GitHub 最近推出的功能,用于標(biāo)記當(dāng)前 PR 為未完成狀態(tài)。其它平臺可能將采用不同的判斷方式。)

說到 Reviewer,就不得不提 Code Owners。Code Owners 是 GitHub 的內(nèi)置功能*,能夠配置每個文件/文件夾的所有者,在 PR 完成時根據(jù)修改文件的范圍自動向添加相應(yīng)文件所有者為 Reviewer,只有當(dāng)各個 Group 的 Reviewer 都同意時才允許合并。(一些第三方工具也提供了類似的機制,功能可能更加強大。)

Code Owners 充分保障了項目的可維護性,每個 Code Owner 同時具備以下職責(zé):

Domain export:對相關(guān)代碼有深度的了解,知曉其歷史背景與特殊行為,能夠快速發(fā)現(xiàn)隱藏問題;

Coordinator:掌握每次修改的內(nèi)容及原因,避免代碼/環(huán)境沖突及已有行為被破壞;

Contact:如果對相關(guān)代碼有疑問,能夠立即確定聯(lián)系對象而無需層層轉(zhuǎn)發(fā);

Responsible person:如果相關(guān)代碼出現(xiàn)了什么意外,負責(zé)背鍋,避免不必要的推諉。

例如將環(huán)境配置文件分配個某個/某些項目組成員,那么他們就能夠充分知曉各個環(huán)境的使用情況,作出合理安排。

如何開始使用 GitHub flow?

使用 GitHub flow 的基本要求有:

具備一個代碼版本控制環(huán)境;

具備一個持續(xù)集成環(huán)境;

(可選)具備 CI 環(huán)境的管理員權(quán)限;

能夠創(chuàng)建一個有權(quán)限訪問 VCS 平臺的機器人帳號;

能夠自由使用 VCS 平臺的 WebHook API;

能夠自由使用 CI 平臺的 Trigger API;

(可選)能夠自由使用 CI 平臺的狀態(tài)查詢 API;

能夠創(chuàng)建一個高可用的內(nèi)部服務(wù)器用于機器人帳號的運行;

能夠決定開發(fā)團隊的工作流程;

能夠投入成本改善基礎(chǔ)設(shè)施;

遺憾的是,我至今沒有過這種條件,如果你有能力去實踐 GitHub flow,希望能夠珍惜這次改善開發(fā)體驗的機會,讓更多人了解這種流程優(yōu)化帶來的巨大效率優(yōu)勢。

如果有任何具體的技術(shù)問題,也歡迎進一步的討論。

寫在最后

以我個人的體驗,GitHub flow 是(世界上唯一的真理)真正能夠拯救開發(fā)效率的敏捷實踐,將開發(fā)人員真正從體力勞動中解放出來,從而能夠?qū)W⒂趯W(xué)習(xí)與思考。

如果你也覺得 GitHub flow 真正拯救了你的項目開發(fā),不妨將它繼續(xù)推廣下去。

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    488

    瀏覽量

    18667
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    是德科技與三星攜手英偉達展示端到端AI-RAN驗證工作流

    是德科技(NYSE: KEYS )與三星電子宣布,會在巴塞羅那舉行的2026年世界移動通信大會(MWC 2026)上,與英偉達聯(lián)合演示端到端人工智能無線接入網(wǎng)絡(luò)(AI-RAN)測試與驗證工作流程。該
    的頭像 發(fā)表于 03-05 10:04 ?376次閱讀

    虛幻引擎5在建筑可視化中的應(yīng)用:趨勢、挑戰(zhàn)與基于Perforce P4的工作流

    UE5正在重塑建筑可視化:實時交互、AI輔助、BIM聯(lián)動......技術(shù)紅利已來,工作流卻拖了后腿?這篇干貨解析了趨勢和痛點,更揭秘了如何用Perforce P4打造高效的UE5工作流
    的頭像 發(fā)表于 02-27 15:26 ?251次閱讀
    虛幻引擎5在建筑可視化中的應(yīng)用:趨勢、挑戰(zhàn)與基于Perforce P4的<b class='flag-5'>工作流</b>程

    安寶特方案丨AI 識別遇上 AR 工作流,PCB 質(zhì)控迎來新的「黃金時代」

    差異和流程不一致長期制約良率,而基于AR標(biāo)準化工作流+AI識別的應(yīng)用,正讓所有工位實現(xiàn)“無差別準確執(zhí)行”。01破解人工質(zhì)檢困境:讓標(biāo)準化操作如臨現(xiàn)場Arbigtec
    的頭像 發(fā)表于 02-10 11:35 ?338次閱讀
    安寶特方案丨AI 識別遇上 AR <b class='flag-5'>工作流</b>,PCB 質(zhì)控迎來新的「黃金時代」

    全面解析:n8n是什么以及它的工作原理

    n8n是一個開源的工作流自動化工具,其名稱源自英文“node-based no-code”(基于節(jié)點的無代碼)的縮寫。
    的頭像 發(fā)表于 01-15 10:07 ?908次閱讀

    摩爾線程發(fā)布SimuMax v1.1:從仿真工具升級為全棧工作流平臺,助力大模型訓(xùn)練提效

    ? ? 近日,摩爾線程正式發(fā)布開源大模型分布式訓(xùn)練仿真工具SimuMax的1.1版本。該版本在完整繼承v1.0高精度仿真能力的基礎(chǔ)上,實現(xiàn)了從單一工具到一體化全棧工作流平臺的重要升級,為大模型訓(xùn)練
    的頭像 發(fā)表于 01-09 09:17 ?241次閱讀
    摩爾線程發(fā)布SimuMax v1.1:從仿真工具升級為全棧<b class='flag-5'>工作流</b>平臺,助力大模型訓(xùn)練提效

    網(wǎng)絡(luò)接口:數(shù)字世界的“門鈴”,了解多少?

    ;淮安移動則在某科技園區(qū)采用了FTTO(光纖到桌面)技術(shù),使工作人員能使用高達1Gbps的專屬帶寬。 結(jié)語 網(wǎng)絡(luò)接口雖小,卻是連接數(shù)字世界的橋梁。了解網(wǎng)絡(luò)接口的基礎(chǔ)知識,不僅能幫助我們更好地使用網(wǎng)絡(luò)設(shè)備
    發(fā)表于 11-26 18:53

    ADI Power Studio工作流程與工具概述

    、直觀的工作流程,利用準確的模型來仿真實際性能,并自動生成關(guān)鍵的物料清單和報告等內(nèi)容,幫助工程團隊更早做出更優(yōu)決策。
    的頭像 發(fā)表于 10-22 09:38 ?1063次閱讀

    恩智浦i.MX RT1180跨界MCU驅(qū)動EtherCAT的工作流

    上周的分享已經(jīng)介紹了整個參考設(shè)計的概況和相關(guān)硬件資源。那么,本次會從軟件工程角度進行分享。首先來了解EtherCAT Slave工作流程。
    的頭像 發(fā)表于 09-28 14:20 ?1207次閱讀
    恩智浦i.MX RT1180跨界MCU驅(qū)動EtherCAT的<b class='flag-5'>工作流</b>程

    電芯自動面墊分選裝盒生產(chǎn)線的工作流程解析

    電芯自動面墊分選裝盒生產(chǎn)線的工作流程解析|深圳比斯特自動化
    的頭像 發(fā)表于 09-28 10:29 ?481次閱讀

    【產(chǎn)品介紹】Altair SimLab可連接CAD的多物理場工作流

    AltairSimLab可連接CAD的多物理場工作流SimLab是一種以流程為導(dǎo)向的多學(xué)科仿真環(huán)境,能夠準確分析復(fù)雜裝配件的性能。包括結(jié)構(gòu)、熱和流體動力學(xué)在內(nèi)的多物理場可以通過高度自動化的建模任務(wù)
    的頭像 發(fā)表于 09-19 17:02 ?795次閱讀
    【產(chǎn)品介紹】Altair SimLab可連接CAD的多物理場<b class='flag-5'>工作流</b>

    科普|關(guān)于GPS和GNSS,了解多少?

    定位(Positioning)為萬物互聯(lián)提供了最基礎(chǔ)信息;當(dāng)今以GPS、GLONASS、Galileo和Beidou為代表的全球定位系統(tǒng)為人們帶來了極大便利;而對于它們是不是真正了解,回答完以下
    的頭像 發(fā)表于 06-28 07:06 ?2877次閱讀
    科普|關(guān)于GPS和GNSS,<b class='flag-5'>你</b><b class='flag-5'>了解</b>多少?

    EMI電源濾波器:真的了解它嗎?

    在我們生活的電子化時代,各種電子設(shè)備層出不窮,從日常的手機、電腦,到工業(yè)領(lǐng)域的自動化設(shè)備,都離不開穩(wěn)定的電源供應(yīng)。但知道嗎,電源中隱藏著一個“隱形守護者”——EMI電源濾波器,它究竟是什么,又有
    的頭像 發(fā)表于 05-28 18:50 ?560次閱讀

    充電接口真的了解嗎?

    USB(Universal Serial Bus,通用串行總線)自1994年誕生以來,已成為我們?nèi)粘I钪胁豢苫蛉钡慕涌跇?biāo)準。從鍵盤、鼠標(biāo)到手機、充電寶,USB接口無處不在。但知道USB接口也有
    的頭像 發(fā)表于 05-18 17:39 ?4528次閱讀

    非技術(shù)人員如何用n8n + DeepSeek打造AI自動化工作流?

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 本文從零開始介紹使用n8n和DeepSeek快速實現(xiàn)一個AI Agent,全自動實現(xiàn)一個Python代碼的生成和執(zhí)行工作流。 一,什么是n8n? n8n
    的頭像 發(fā)表于 04-09 14:28 ?8438次閱讀
    非技術(shù)人員如何用n8n + DeepSeek打造AI自動化<b class='flag-5'>工作流</b>?

    采購GUTOR UPS備品備件,隱藏的“雷區(qū)” 了解嗎?

    在GUTOR UPS備品備件采購之路上,困難重重,選型、渠道甄別、成本把控、安裝部署、售后保障,樁樁件件都是棘手難題。隱藏的“雷區(qū)” 了解嗎?
    發(fā)表于 03-21 16:08