2019年2月11日 星期一

C#專案在Gitlab上建立CI/CD機制(中)


在Gitlab上C#專案建立CI機制(上)

只介紹建立gitlab server到git runner的連結

要在Build Server上能建置專案

還需要安裝一些套件與一些設定

總結需要安裝的有:

1. git 套件,2. nuget 套件,3. MSBuild 套件

本篇還會提供解決的問題有:

1. gitlab查看runner結果會亂碼的問題

2. MSBuild 建置時無目標版本問題



在Build Server上

由於需要下載gitlab上的程式進行建置作業

所以Build Server上會需要使用到git的指令

所以第一個需要下載安裝git


安裝過程就是用預設的選項下一步進行安裝

若是未安裝git,則會出現以下這類的錯誤訊息:

亂碼問題下面一點會提到如何解決


第二個需要裝的是nuget

目前C#的專案大部分都透過nuget進行套件管理與參考

因此先到nuget官網下載nuget的執行檔

把下載的nuget.exe放置在一個固定的位置

之後在環境變數path加入nuget的路徑


這邊是把nuget.exe放置在c:\nuget資料夾裡

因此在環境變數就加入此路徑


接著如果需要編譯的是.net core的程式

則只要下載.net core的SDK

網路上有許多文章提到.net core的SDK也可以編譯.net framework的專案

其實不然

舊的.net framework專案的專案檔.csproj的格式與.net core的格式不同

所以舊的.net framework專案是無法直接透過.net core SDK進行編譯

需要調整專案檔.csproj的格式

但這不在我們這次的討論範圍


這裡還是透過傳統的MSBuild來進行.net framework專案的編譯

所以第三個就是要下載MSBuild的安裝檔


以上三項都安裝完之後

就能開始修改ci文件 .gitlab-ci.yml

參考的建置yml如下:


before_script: - chcp 65001

這一段主要是要解決windows中文版,錯誤訊息在gitlab上顯示亂碼的問題

而script: 則分為上述提到的兩塊

nuget restore 專案檔路徑 -PackagesDirectory packages



msbuild 專案路徑

FrameworkTest\FrameworkTest.csproj 則是進行測試的專案的相對路徑


正當以為上述都完備後,按下commit之後

會發現雖然gitlab的頁面顯示PASS通過

但細看內部的訊息其實是有問題


雖然已經安裝的MSBuild套件

但對於個別的.net framework版本還是無法進行編譯

需要下載目標套件的.net framwork版本

這邊建議直接下載Developer Pack

其中包含:SDK與Targeting Pack

這時候再進行一次.gitlab-ci.yml的commit


終於能看到建置成功與0個警告與錯誤


在當初放置gitlab runner的目錄下

會產生一個builds的資料夾

裡面會有gitlab runner透過git把程式pull下來的檔案

建置成功

就會在該專案指定的建置目錄產生建置後的檔案

如下所示:

除了專案建置產出的dll外,連同所參考的nuget套件dll也都會一併建置出來了


以上是針對單一專案進行CI建置的方式

script可以再加入多個專案進行建置

以及建置後的佈署機制

這之後就再另開篇幅紀錄了!

1 則留言:

  1. 請問出現以下錯誤, 可以怎麼排程問題呢, 謝謝

    C:\hello\HelloWorld>msbuild HelloWorld.csproj
    Microsoft (R) Build Engine version 14.0.23107.0
    Copyright (C) Microsoft Corporation. All rights reserved.

    Build started 6/17/2021 7:10:00 AM.
    Project "C:\hello\HelloWorld\HelloWorld.csproj" on node 1 (default targets).
    C:\hello\HelloWorld\HelloWorld.csproj(87,3): error MSB4019: The imported project "C:\Program File
    s (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" wa
    s not found. Confirm that the path in the declaration is correct, and that the file exis
    ts on disk.

    回覆刪除