GitLab 的 C++ CI/CD 腳本:使用 PowerShell

之前已經在《GitLab 簡單的 C++ 專案腳本範例》這篇文章裡面,大概整理了一下 Heresy 這邊針對自己的 C++ 專案、撰寫出來的 GitLab CI 自動建置的腳本了。

不過,當時在 Windows 平台下,Heresy 是使用「Windows Batch」(CMD)這個 shell 來進行操作的。

但是,GitLab 官方其實有說,從 11.11 開始,就將「Windows Batch executor」設定為棄用(deprecated),並將於 13.0 時移除(預計時間是 2020/06/22);而取而代之的,GitLab 將使用 PowerShell 來作為 Windows 上預設的 shell。(參考

而這篇記錄,就是簡單地記錄一下 Heresy 把之前 cmd 的 script、改寫成 PowerShell 版本的紀錄。

閱讀更多»

GitLab 簡單的 C++ 專案腳本範例

之前寫過《Gitlab CI/CD 簡單介紹》,大概介紹過 GitLab CI/CD 的架構了,而 Heresy 這邊,其實也針對工作用的 C++ 專案,撰寫了對應的腳本了。

雖然實際上還是有點問題,不過目前看來運作得好像也還算正常,就來稍微分享一下吧~

首先,在系統的配置上,Heresy 這邊是準備了兩台 VM 作為 GitLab Runner,一台是 Windows 10、一台是 Ubuntu,分別處理 Windows 和 Linux 的環境。

而在腳本上,則是分成了分析、建置、測試三個階段:

閱讀更多»

Gitlab CI/CD 簡單介紹

今年初,Heresy 算是終於把工作地方的 GitLab 重新架設起來了。而後來好一段時間,Heresy 則都是在研究他的 CI/CD(Continuous Integration and Deployment)到底該怎麼做,目前也算終於弄到可以動了,所以就在這邊紀錄一下吧~

不過,這篇主要是先就 Heresy 理解的概念來寫,也希望沒有理解錯誤就是了。

首先,Gitlab 的 CI/CD(官網)做的事情,實際上就是讓 Gitlab 系統,可以在特定的時候(通常是 push、merge、或是自己排程),根據所撰寫的腳本,去進行程式碼的自動化建置、測試、甚至佈署。

下面的圖,就是官方提供的 GitLab CI/CD 的示意流程圖。

閱讀更多»

GitLab 系統架設簡單紀錄

Git(官網)目前應該算是現在最受歡迎的程式碼版本控管系統之一,而 GitHub(官網)也堪稱全球最大的開放原始碼軟體的倉庫了。

不過,雖然 GitHub 的網頁介面非常地方便,也受到大多數人的青睞,但是他並沒有提供整個系統讓使用者自行架設;而如果要自己架設類似的管理系統的話,目前看來最合適的,似乎就是 GitLab(官網)了。

GitLab 除了和 GitHub 一樣,有提供免費/付費的線上服務外,和 GitHub 不同的是,他是開放原始碼,並且也提供套件,讓使用者可以自己架設 GitLab 的服務。

而這一篇文章,就是 Heresy 自己試著架設 GitLab CE(社群版)的紀錄。

閱讀更多»

Git 切割方法:subtree

之前在研究切割 Git Repository 的時候,曾經寫了一篇《分割 Git Repository》做紀錄,不過最近要再做處理的時候,才發現當時紀錄的方法,比較接近使用「filter-branch」這個指令來硬上;實際上 Git 本身還有提供其他的方法,可以更直覺地把 Repository 的一部分、切割出來成為一個獨立的 Repository。

這樣的功能,在 Git 裡面是所謂的 subtree。

如果要針對現有的 respository 做切割的話,基本上就是要使用 git subtree split 這個指令;例如:

git subtree split -P ModuleAPath -b "ModuleA"

上面的 git 指令的效果,就是建立出一個新的新的分支(branch)「ModuleA」,裡面只有「ModuleAPath」這個資料夾下的東西而已。

閱讀更多»

解決 git out of memory 的問題

之前 Heresy 有整理過一篇《使用 TortoiseGit 將 SVN 轉移到 Git 的紀錄》,試著去把 SVN 的程式轉移到 GIT 的環境;不過當時因為還有其他事,所以只是先測試、並沒有完全完成。而最近,算是有真的需求、需要做轉移的工作了,所以又把他撿回來、試著做了一下。

結果,感覺似乎是因為 SVN 的東西又變多很多了,結果現在用 Git 取得 SVN 的資料的時候,跑到一半就會出現錯誤訊息了…下面就是錯誤訊息:

Auto packing the repository for optimum performance. You may also run "git gc"
manually. See "git help gc" for more information.

warning: suboptimal pack - out of memory

fatal: Out of memory, malloc failed (tried to allocate 98849273 bytes)

error: failed to run repack

gc --auto: command returned error: 255

git did not exit cleanly (exit code 1) (13256532 ms @ 2015/--/-- --:--:--)

這個錯誤,基本上應該就是在執行「git gc」的時候,記憶體不夠他去配置,導致觸發了記憶體不足的錯誤。

閱讀更多»

分割 Git Repository

在 Heresy 來看,Git 和 SVN 相比,雖然因為他的分散式設計,有相當多的好處,不過,還是有一些地方,是比較不方便的。其中一個,就是在複製 repository 的時候,必須要把整個一起複製下來、而不能只複製其中一部分。

也因為這個問題,所以如果再 SVN 是把多個專案放在同一個 repository 裡使用的話,再轉換到 Git 後,會產生「明明只是要其中一個專案,卻需要把所有專案都複製下來」的問題。

而要解決的方法,基本上就是要把 repository 底下的不同專案、各自切割出來了~Heresy 這邊主要是參考《git 倉庫分家》這篇文章的做法。

閱讀更多»

使用 TortoiseGit 將 SVN 轉移到 Git 的紀錄

Git(官網)在 Heresy 來看,他最大的好處,就是它是一個分散式版本控款系統;有別於 SVN 這類的中央控管式的版本控管系統,Git 最大的好處是,你可以簡單地把一個 Server 上的「Repository」複製下來,在自己的電腦上、獨立進行版本控管,並且在必要的時候,還可以透過 push / pull 的機制、簡單地和 Server 端的東西最整合!所以就算是沒有網路,也可以自己在自己的電腦上、進行版本控管的動作~

而這篇文章,是 Heresyn 自己在試著透過 TortoiseGit 把版本控管系統,由 Subversion(SVN、官網),轉移成 GIT的紀錄。在環境的部分,Heresy 這邊是在 Windows 環境下進行,本來就已經安裝、設定好了這兩者在 Windows 上所使用的工具;這邊 Heresy 所使用的是 TortoiseSVN(官網)和 TortoiseGit(官網)這兩套軟體。

不過這邊也先強調一下,這邊的方法應該不是最完美的方法,雖然應該是可以用、但是還是有一點小問題的

閱讀更多»