svn遷移gitlab,構建前端打包發布流程

2022-02-11 10:00:05 字數 1431 閱讀 2562

目前公司的前端資源託管在svn伺服器上,由於團隊的逐漸擴大,svn的分支管控越來越不靈活,而且對於以後前端流程一體化的處理支援不是很好,因此決定在版本控制上轉向git。git的好處不用多說:多分支並行開發,自動化構建,持續整合等等,這也是促使我們轉向它的原因。

首先嘗試使用gitlab提供的web hooks進行觸發指令碼控制。web hooks發出的post請求我們的php檔案,在php中執行相關shell指令碼,完成一體化構建。但是shell中的提示輸出資訊無法在本地進行顯示,因此即使專案構建失敗,開發人員並無法在git命令列得到直觀的提示,使用者互動很不友好。經測試,只有放在remote端的hooks目錄下的指令碼輸出資訊才能呈現在終端,因此最終放棄此種方案。

gitlab提供的web hooks的底層實現-update.rb的邏輯是基於remote端的update hook。update hook 會在使用者每次push到remote時觸發,根據返回值是否為0,來決定此次push是否成功,它接收3個引數,第乙個位push的引用分支名,第二個為push之前的分支sha1,第三個為push之後的sha1。update.rb封裝了提供了web hooks的功能,預設通過http post請求訪問我們的服務端,然後執行服務端的命令。最後,更新web介面。

其次把目光轉移到remote端的hooks目錄,將我們的update指令碼放入hooks中,但是問題來了,由於gitlab提供的web hooks觸發也是基於update指令碼,而且該update指令碼軟連線到乙個ruby指令碼(所有的gitlab專案共用同乙個ruby指令碼),因此,無法針對前端工程制定特有的發布流程,只有手動將所有的前端工程軟鏈結到乙個ruby指令碼的副本(update_f2e),在這裡做法就有點曲折:

1,首先,我們在update_f2e這個ruby中先執行原有的邏輯,最後執行我們自己寫的update(shell指令碼),但是問題在於在update(shell指令碼)中無法接收update_f2e傳入的引數,而且update(shell指令碼)中的提示資訊也無法顯示在終端,使用者體驗差,放棄;

2,然後針對呼叫流程重新構建,指令碼全部ruby化。將我們的shell指令碼的邏輯修改為ruby,在update_f2e中執行,問題仍然是輸出資訊無法顯示,放棄;

3,究極版,將update_f2e這個ruby檔案修改為shell指令碼,在我們的shell指令碼執行完畢之後,通過命令列執行原有的ruby邏輯,最終,目的達成。

說了這麼多,嘗試了接近幾百次push,終於採用shell->ruby的方式完成hook的無害觸發,實現構建發布。

最後,方法3的方法有乙個弊端,就是服務端的**更新成功,但gitlab的web介面卻無法更新,通過排查gitlab的ruby原始碼,發現是在gitlab-shell/lib/gitlab_update.rb中的 api.allowed?()執行失敗造成,進一步深入gitlab_net.rb中,發現是我們的當前目錄像響了api.allowed?方法的判斷,因此在hooks/update的shell中切換到合適目錄之後,解決了該問題。

SVN遷移Gitlab步驟

公司要求將之前使用svn進行管理的專案遷移到gitlab進行專案管理,但是運維連不上我們這邊的svn伺服器,於是我們就得自己將svn專案遷移到gitlab。yeah!終於有我表現的機會了。要求保留svn上的提交記錄 總體的執行步驟如下 賬號對應 git svn拉取原來svn專案 提交專案到gitla...

SVN專案遷移GitLab步驟

1.第一步,匯出svn專案的提交日誌,即show log對應的提交日誌,執行如下命令 cat changelog.txt awk f sort u awk awk users.txt users.txt最後的格式如下 xiaomin xiaomin xiaomi xiaomi 左側的 xiaomin...

如何把SVN遷移到Gitlab

把svn上的 倉庫遷移到gitlab上,實際上就是把svn倉庫轉變成git倉庫,並且希望能保留原svn倉庫的commit等歷史記錄,這一點很重要。svn遷移到gitlab需要安裝git svn yum install y git svn保留原svn倉庫的commit等歷史記錄,需要獲取到svn使用的...