VSTS-One Repository Multi-Solutions的CI問題

VSTS-One Repository Multi-Solutions的CI問題

fb talk

導入持續整合(CI)後,方案與專案架構方式 的分享,從小朱與董大偉老師得到很棒的回應:

小朱:我兩種都用過,但我最後採用 Multiple Solutions。

董大徫:目前我們team的VSTS專案,一個Repository裡面會有多個solutions(如果有必要的話,小一點的專案只有一個),一個solutions裡面會有多個project(幾乎都是這樣)。只要會彼此reference或必須一起build的project,我們大多會放在同一個solution。如果本質上不需要一起build(但架構上有關,例如一套ERP中的某幾個部分,例如mobile App, desktop client)、且Work Items/Sprints在一起控管的project,會切成兩(多)個solutions(但大多放在同個Repository)。至於Deploy,一個Solution裡面有多個Web Project應該不少見,在Build完之後(同一個build definition)可以同時deploy到各自的web site這應該沒問題。但我們用的是TFVC。

One Repository, Multi-Solutions problem

vsts build - Continuous integration

不過,這並沒有解決我在 VSTS Build 上的問題,例如,我們有做共享的元件,並發行至 NuGet Server,為了能獨立(三個共享元件並無互相參考)發行,所以我採用的也是「一個 Repository 裡面會有多個 solutions」的策略,但這樣的策略或許平常不會有問題,但我就碰到一個不方便的地方,那就是 VSTS 的 Build 為了自動化,通常會設定啟用 Continuous integration (CI) 的功能,但 CI 是以 Repository 的分支為單位,類似以下的結構:

Repository
 --> master
  --> a solution
  --> b solution
  --> c solution
 --> develop
  --> a solution
  --> b solution
  --> c solution
 

當 pull requests 觸發 master 合併時,CI 機制也會被觸發,但觸發的結果是,你針對 a, b, c 不同 solution 定義的 build definitions 會同時被觸發。

觸發就觸發,問題是,雖然 VSTS 的 Build 每個月送 240 分鐘免費,但這樣浪費的用法是不對的。每次都要手動去取消其他的建置而造成紅燈,總感覺這是半套的 Build。

One Project, Multi-Repositories

請教另一位同事,得知 VSTS 還有另一種 Repository 的組織方式,也就是一個 Project 下面可以存在有多個 Repository (Git / TFVC都行),而且設定方式超簡單(只是不容易查覺)。

vsts - create new team project

當我們開發專案後,切換至 CODE,可以看到目前專案 Repository 與程式碼:

vsts - code tab

點擊現在 Repository,在下接選單中可以看到new repository,就可以在此 project 下建立新的 repository:

new repository...

新增的 Repository:

vsts - create a new repository

感謝董大徫老師的提醒,TFVC 無法使用一個 Project 多個 Repository 的方式:

vsts - tfvc can not create a new repository

這樣就能把各別獨立的共享元件給一一抽離出去至新的 Repository 去。

new repository

小結

「One Repository, Multi-Solutions」在 VSTS持續整合(CI) 如果碰到各別獨立的 Solution 是有些麻煩,如果你們有花錢買VSTS 私有 Build Agents 數的話,那麼透過自己的 Build Server 主機來執行,或許不處理這段也沒關係。但獨立性夠的 Solution 讓它有自己的空間,我想他也會快樂些。

另外經董大徫老師的提醒,去細看文件(我眼睛業障重呀!):

Make the sure the solutions you specify are downloaded by this build definition. On the Repository tab:

  • If you use TFVC, make sure that the solution is a child of one of the mappings on the Repository tab.
  • If you use Git, make sure that the project or solution is in your Git repo, in a branch that you're building.

VSTS 在 Build 針對不同版控有不同設計,看起來,Git 應該切成對應的 branch 來進 build,等於有多個 a, b, c build master,分支太容易,是好也是壞。你會如何選擇呢?

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。