[Gulp][.Net Web Application][CI] 方案結構與透過 Gulp 進行 NuGet Package Restore

前言

在幾乎完成 Gulp 實作 .Net Web Application 持續整合時,正巧遇上 Visual Studio 2015
Update 3 release,開發團隊成員也陸續進行升級。因為這次是新的專案,開發初期套件
更動較頻繁,很快發現專案進行 package restore 的過程中,出現部分套件相依錯誤或者
找不到某些套件的錯誤 (猜測是 Nuget 升級的關係),個人將進行Visual Studio升級後解
決了這個問題。而CI部分下載並更換最新的 Nuget.exe 即可正常運作。
本篇文章將簡單介紹如何透過 gulp套件執行 Nuget.exe ,替專案進行 package restore。

本系列文章大概內容如下(暫定,會修改):
Using gulp to implement .Net web application continuous integration
1.Gulp 基礎教學
2.流程簡介、代入參數與修改AssemblyInfo
3.透過 Gulp 進行 NuGet Package Restore
   3.1  方案架構
   3.2  Package Restore
   3.3 下載與設置 NuGet.exe
   3.4 進行 NuGet Package Restore
4.透過 Gulp:gulp-msbuild 進行 Build project
5.透過 Gulp:gulp-nunit-runner 進行 Unit Test
6.Gulp CI Deploy (1) - 透過Gulp : Robocopy 進行 Deploy
7.Gulp CI Deploy (2) - 使用 MSDeploy (WebDeploy) 進行 Deploy
8.Gulp CI IIS Management - 使用 PowerShell 變更實體路徑
9.最終篇: Team City 設定 與 Build Scripts 撰寫

本系列文章使用的環境如下:
1.Visual Studio 2015 Community Update 3
2.Visual Studio Core
3.TeamCity
4.Nunit 3.2.1.0
5.NuGet 3.4.4.1321

介紹

方案結構
這次系列文章的方案結構如下圖所示:主要為 1 個 WebAPI Project、 1 個 MVC Project 與 2 個
Test Projects,測試專案命名規則結尾為UnitTests,方便我們後續進行測試作業。

 

 

Package Restore
無論前端套件(如:nodejs 的 node_modules)或者後端套件(.net 的 package),不建議上傳至版本
控管伺服器,正如前面文章所描述,當套件版本更新或開發人員進行版本異動,皆有可能造
成編譯錯誤。比較好的方式是開發人員下載程式碼後,於個人開發環境重新進行安裝套件後進行
編譯,降低套件問題發生。而持續整合的流程也不例外。
在 Visual Studio 2015 環境,偵測沒有 package 或 缺少套件的情形下,於編譯前會自動進行
 Restore,而在持續整合的環境下,我們必須透過 NuGet.exe 協助。

 

 

下載與設置 NuGet.exe
Step 1. 到 Nuget 網站 下載 Nuget.exe

Step 2. 將 Negut.exe 放置於方案下 tools 資料夾下 (可以個人習慣放置,但是在 編輯 gulpfile.js
請依實際放置位置設定)

 


進行 NuGet Package Restore
Step 1.輸入以下指令安裝 nuget-runner 套件

npm install --save-dev nuget-runner

Step 2.於 gulpfile.js 加入以下程式碼
(詳細 Nuget.exe 參數內容可以參考 https://docs.nuget.org/consume/command-line-reference)

var gulp = require('gulp'),
      Nuget = require('nuget-runner');

gulp.task('restore', function() {
    var nuget = Nuget({
        nugetPath: 'tools/NuGet.exe',            
        verbosity: 'detailed'

    });

    return nuget.restore({
        packages: 'XXXX_2016.sln',      
        source: ['https://www.nuget.org/api/v2/'],        
        noCache: true,  
        requireConsent: true,
        packagesDirectory: 'packages',
        solutionDirectory: '',
        disableParallelProcessing: true,  
        verbosity: 'detailed'
    });
});



Step 3. 先將 package 內資料全部刪除。

Step 4. 執行指令 gulp restore

gulp restore


Step 5. 完成,您也可以檢查一下package資料夾是否有套件

 


上一篇:[Gulp][.Net Web Application][CI] 流程簡介、代入參數與修改AssemblyInfo
下一篇:Gulp CI Build - 使用 MSBuild (暫定)

 

 

參考資料

1.Using Gulp to Build and Deploy .NET Apps on Windows
2.MSBuild - MSDN - Microsoft
3.Command Line Reference - NuGet Docs
4.NUnit-Console Command Line Options
5.gulp API docs


本篇文章有部分內容參考相關網站資料,若有不妥請告知,我將盡快移除。