本文與Buddy合作創作。感謝您支持使SitePoint成為可能的合作夥伴。
本文將指導您如何為分支工作流程設置持續集成/部署管道。我們將使用Buddy CI/CD服務來設置這些管道。我們將使用一個基本的JavaScript項目,在這個項目中我們將設置幾個開發分支。我將向您展示如何在每種類型的分支上自動化測試。我還將介紹分支工作流程的概念,並展示一些您可以在項目中採用的示例。
要學習本教程,您只需要基本的Node.js技能。您還需要熟悉Git。以下是一些可以幫助您的文章:
為了設置我們的管道,我們將需要使用Jest編寫一些測試。如果您不熟悉Jest,則無需學習它——本文的重點是學習如何設置將自動選擇新分支並為您構建它們的管道。在我們開始之前,我們應該研究一下我們可以使用的各種分支策略。
零分支策略只是“您沒有使用任何分支策略”的一種說法。它也被稱為基本工作流程。您只有一個主分支,您可以在其中直接提交和構建您的版本。如果項目滿足以下條件,則此策略很方便且很好:
此類項目包括教程、演示、原型、入門項目模板和個人項目。但是,這種方法有幾個缺點:
所有這些問題都可以通過採用分支策略來解決。這應該為您提供:
請注意,您可以自由選擇許多類型的分支工作流程。您還可以創建適合您自己的自定義分支工作流程。讓我們從最簡單的分支策略開始。
在此策略中,您將設置一個名為develop的長期分支,該分支與主分支並行運行。所有工作都首先提交到develop分支。這是一個安全的地方,您可以在其中引入可能破壞項目的代碼。您需要一個測試策略來確保在合併更改時不會將錯誤引入主分支。
此工作流程的優點是:
此工作流程的缺點是:
讓我們看看另一種可以減輕這些挑戰的工作流程。
在此工作流程中,每次要開發新功能時,您都會設置一個新的功能分支。如果出現問題,您可以隨時在主分支上應用熱修復。開發人員需要首先從主分支中提取最新的修復程序,然後才能將其功能分支合併到主分支中。
為了跟踪當前正在開發的功能和錯誤修復,您需要為分支制定命名約定。以下是一些您可以在互聯網上找到的格式建議:
此策略的優點是:
此策略的缺點是:
讓我們看看下一個策略,看看我們如何減輕這個問題。
如果您能夠結合“開發”和“功能”分支工作流程,您將獲得一個可以消除彼此缺點的解決方案。 Vincent Driessen撰寫了一篇博客文章,其中描述了一種高級git分支模型,該模型可以幫助大型團隊在復雜項目上高效協作,並將版本控制問題降到最低。
Gitflow是一個可定制的模型,允許您選擇最適合您的項目和團隊的功能。如果您使用Gitflow,您可以採用Daniel Kummer的git-flow git擴展。這些工具允許開發人員根據Vincent的模型執行高級存儲庫操作。我不會深入討論這一點,但以下是一些您需要了解的內容。
優點:
缺點:
現在讓我們看看如何使用Buddy CI服務自動化我們分支上的任務。
我們首先需要設置一個簡單的項目,並使用它來設置我們的管道。我們將創建僅自動提取更改並運行測試的管道。首先,創建一個新的GitHub存儲庫。將其命名為buddy-demo。
接下來,下載以下入門項目並將其推送到您的存儲庫:
<code>$ git clone git@github.com:brandiqa/react-parcel-starter.git buddy-demo $ git remote rm origin # 将`username`替换为您自己的用户名 $ git remote add origin git@github.com:username/buddy-demo.git $ git config master.remote origin $ git config master.merge refs/heads/master $ git push -u origin master </code>
該項目是一個使用Parcel構建的簡易React項目。您可以運行以下命令以確保其正在運行:
<code>$ npm install $ npm start </code>
如果您使用的是Visual Studio Code,請按F5啟動瀏覽器。否則,打開瀏覽器頁面並導航到localhost:1234。
如您所見,沒有什麼特別之處。在我們將其部署到Buddy CI之前,我們需要編寫一個測試。我們將為此使用Jest測試框架:
<code>$ git clone git@github.com:brandiqa/react-parcel-starter.git buddy-demo $ git remote rm origin # 将`username`替换为您自己的用户名 $ git remote add origin git@github.com:username/buddy-demo.git $ git config master.remote origin $ git config master.merge refs/heads/master $ git push -u origin master </code>
更新package.json腳本部分,以便在執行npm test命令時運行jest。
<code>$ npm install $ npm start </code>
讓我們稍微更新一下srcApp.jsx:
<code>$ npm install -D jest </code>
接下來,讓我們編寫一個通過的虛假測試。創建文件App.test.js並插入此代碼:
<code> "scripts": { //... "test": "jest" }, </code>
執行命令npm test以確認我們的測試已通過。
提交您的更改並將其推送到您的GitHub存儲庫。接下來,我們將在Buddy上設置我們的CI管道。如果您不熟悉該平台,只需使用您的GitHub帳戶註冊一個免費帳戶即可。請注意,Buddy支持許多除GitHub以外的遠程存儲庫服務:
無論您選擇哪個服務提供商,Buddy都會列出您可以為其設置自動化的存儲庫。在本例中,我們將選擇buddy-demo項目。單擊“添加新管道”按鈕,然後在下一頁中填寫以下詳細信息:
在我們的主分支管道中,我們將為以下內容設置操作:
在下一頁中,您將看到定義操作的不同方法。選擇Node.js,然後在下一頁上,確保已指定以下命令:
<code><div>> <h1>></h1>React Parcel Starter Kit> <p>></p>This page is on master branch!> </div>> </code>
您可以在“操作”選項卡中將操作名稱重命名為“運行測試”。我想指出的是,如果您的測試需要數據庫服務,您可以通過“服務”選項卡設置一個:
大多數流行的數據庫都已得到支持。只需選擇數據庫類型並提供連接詳細信息和憑據即可。完成後,單擊“添加此操作”按鈕。在下一頁上,單擊底部的加號按鈕以添加“捆綁資源”操作。再次選擇Node.js,並在下一頁中輸入以下命令:
<code>$ git clone git@github.com:brandiqa/react-parcel-starter.git buddy-demo $ git remote rm origin # 将`username`替换为您自己的用户名 $ git remote add origin git@github.com:username/buddy-demo.git $ git config master.remote origin $ git config master.merge refs/heads/master $ git push -u origin master </code>
在“操作”選項卡中將操作重命名為“捆綁資源”。完成後單擊“添加此操作”。再次單擊加號符號以添加“部署到生產”操作。 Buddy 原生支持將項目部署到不同類型的託管供應商:
如果您在任何這些服務中擁有帳戶,請隨意使用任何部署選項。如果您沒有,請選擇允許您設置免費帳戶以部署您的應用程序的提供商。在我的例子中,我已經有一個我可以使用的共享Web託管計劃帳戶。通常,您將擁有您的主要網站 www.domainname.com 來託管項目的實時生產版本。
您需要擁有一個單獨的登台站點(通常對公眾隱藏),該站點是從您的開發或集成分支管道部署的。登台站點可以只是一個子域,搜索引擎不應該對其進行索引。登台站點將允許開發人員、項目經理和測試人員在推送到實時生產站點之前確認新功能是否正常工作。
要將您的應用程序部署到共享或專用Web託管服務器(使用CPanel),只需使用FTP方法即可。 Buddy還提供了一個sFTP方法,該方法在上傳到服務器時會加密您的項目資源包。以下是我如何設置我的示例:
您需要使用您的CPanel設置一個新的FTP帳戶。確保您的新FTP用戶帳戶的主目錄直接指向www或子域文件夾。否則,您可能無法通過FTP訪問正確的託管目錄。設置管道中的所有三個操作後,您可以:
完成後,完整的管道如下所示:
假設您使用的是Gitflow工作流程或類似的工作流程,您可能需要為以下內容設置其他管道:
開發分支管道幾乎與主分支管道相同。但是,您需要為部署提供不同的配置,以便將代碼部署到登台站點。功能和熱修復分支管道只需要配置至少測試操作。您可能希望限制您可以在功能分支管道中運行的測試數量。您可以通過簡單地將此添加到測試命令來輕鬆地在Jest中執行此操作:jest --coverage --changedSince=master。這將只測試尚未推送到主分支的新代碼。
由於將存在多個功能和熱修復分支,您可能想知道如何為這種情況設置管道。很簡單——只需使用通配符選項:
要確認您的develop/feature*/hotfix*管道正在工作,只需在您的計算機上創建分支即可。在本例中,讓我們創建一個隨機功能分支:
<code>$ git clone git@github.com:brandiqa/react-parcel-starter.git buddy-demo $ git remote rm origin # 将`username`替换为您自己的用户名 $ git remote add origin git@github.com:username/buddy-demo.git $ git config master.remote origin $ git config master.merge refs/heads/master $ git push -u origin master </code>
然後在App.test.js中創建一個新的測試:
<code>$ npm install $ npm start </code>
接下來,提交更改並將分支推送到您的GitHub存儲庫:
<code>$ npm install -D jest </code>
如果您快速切換到您的Buddy帳戶儀表板,您應該會看到您的管道拾取您的新分支並運行您定義的操作。這就是我們為項目已採用的任何分支策略工作流程設置管道的方式。
最後需要注意的是,如果您計劃擁有長期分支,最好先在共享存儲庫中設置它們。這樣,當您開始創建新管道時,您可以簡單地使用“選擇分支”選項來選擇您的長期分支。
我們現在已經完成了本教程。作為一項挑戰,請繼續為熱修復和開發設置管道。創建一些分支並編寫一些失敗的測試以查看會發生什麼。您還可以繼續研究更多關於Git分支策略的信息。如果您願意,您甚至可以安裝git-flow並使用該工具自定義您自己的分支工作流程。然後,設置您的Buddy管道以支持您的自定義git分支工作流程。
Git分支是任何軟件開發過程的關鍵部分。它們允許開發人員同時處理不同的功能或錯誤修復,而不會影響主代碼庫。這意味著開發人員可以在安全的環境中試驗新想法,而不會冒破壞現有代碼的風險。如果新功能或錯誤修復成功,則可以將其合併回主代碼庫。這使得開發過程更高效,並降低了將錯誤引入生產代碼的風險。
在Git中創建新分支很簡單。您可以使用git branch命令,後跟新分支的名稱。例如,git branch new-feature將創建一個名為“new-feature”的新分支。創建分支後,您可以使用git checkout命令切換到該分支,如下所示:git checkout new-feature。
將更改從一個分支合併到另一個分支在Git中是使用git merge命令完成的。首先,您需要切換到要將更改合併到的分支。這可以使用git checkout命令完成。一旦您處於正確的分支上,您可以使用git merge
當兩個或多個開發人員在不同分支中對代碼庫的同一部分進行更改,然後嘗試合併這些更改時,就會發生Git分支衝突。 Git不知道要保留哪些更改,要丟棄哪些更改,從而導致衝突。要解決衝突,您需要手動編輯衝突的文件以決定要保留哪些更改。解決衝突後,您可以使用git add將已解決的文件添加到暫存區,然後使用git commit提交更改。
在Git中刪除分支是使用git branch -d命令,後跟分支的名稱完成的。例如,git branch -d old-feature將刪除名為“old-feature”的分支。但是,如果分支有尚未合併的更改,Git將不允許您刪除該分支。如果您確定要刪除分支並丟失這些更改,您可以改用-D選項,如下所示:git branch -D old-feature。
您可以使用git branch命令(不帶任何參數)查看Git存儲庫中的所有分支。這將列出存儲庫中的所有分支,當前分支突出顯示並用星號標記。
Git中的本地分支是僅存在於本地計算機上的分支,而遠程分支是存在於遠程存儲庫上的分支。克隆存儲庫時,Git會為所有遠程分支創建本地分支。您可以處理這些本地分支,然後在準備好時將更改推送到遠程分支。
重命名Git分支是使用git branch -m命令,後跟舊分支名稱和新分支名稱完成的。例如,git branch -m old-name new-name將把分支“old-name”重命名為“new-name”。如果您當前位於要重命名的分支上,您可以省略舊分支名稱,如下所示:git branch -m new-name。
可以使用git revert命令,後跟提交哈希來恢復Git分支中的更改。這將創建一個新的提交,撤消在指定提交中所做的更改。例如,git revert a867b4af將創建一個新的提交,撤消在哈希為“a867b4af”的提交中所做的更改。
您可以使用git log命令查看Git分支的提交歷史記錄。這將按相反的時間順序顯示當前分支上進行的所有提交的列表。如果您想查看不同分支的提交歷史記錄,您可以指定分支名稱,如下所示:git log branch-name。
以上是如何使用git分支和好友組織項目代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!