[TFS 2015] 實作 Build vNext + Release 自動部署元件到內部 Nuget Server

以往,我都是使用用 NuGet Package Explorer 手動部署到公司內部的 Nuget Server,也用過 Nuget Packager,這兩種方法都不錯,只是無法自動地跟我的測試整合在一塊

TFS 2015 Build vNext 裡面有打包 Nuget Package 的步驟,Release 有部署 Nuget Package 的 Task,新版的 TFS 2015 讓我的自動化部署 Nuget 變得很簡單,有在使用 Nuget 的夥伴,可以參考我的設定。

伺服器環境

  • Windows 2012 Datacenter x64 中文版
  • TFS 2015 Update2 中文版

本文章節

這裡有很多步驟都是跟前面兩篇相似,重點在 Nuget 的設定,若已經熟悉設定,可直接傳送到 Nuget
https://dotblogs.com.tw/yc421206/2016/04/22/tfs2015_build_vnext_release_deploy_internal_webapp
https://dotblogs.com.tw/yc421206/2016/04/20/tfs2015_build_vnext_webdeploy

在專案加入 Package.nuspec

這個檔案有一點像範本,用來產生 Nuget Package (*.nupkg),骨子裡就是 XML 阿,內容如下:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>your id</id>
    <version>1.0.0</version>
    <title>your title</title>
    <authors>余小章</authors>
    <owners>onwer</owners>
    <description>
      SpecFlow 擴充功能
    </description>
    <releaseNotes>
    </releaseNotes>
    <summary>
    </summary>
    <language>en-US</language>
    <projectUrl>your projectUrl</projectUrl>
    <iconUrl>your iconUrl</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <licenseUrl>http://opensource.org/licenses/Apache-2.0</licenseUrl>
    <copyright>your copyright</copyright>
    <dependencies>
      <group targetFramework=".NETFramework4.6.1">
        <dependency id="SpecFlow" version="2.0.0" />
      </group>
    </dependencies>
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System" targetFramework="" />
      <frameworkAssembly assemblyName="System.Core" targetFramework="" />
    </frameworkAssemblies>
    <references></references>
    <tags></tags>
  </metadata>
  <files>
    <file src="bin\Release\your dll" target="lib" />
    <file src="bin\Release\your dll.config" target="lib" />
    <file src="bin\Release\your dll.config.XML" target="lib" />
    <!--<file src="bin\Release\" target="lib\net461" />-->
    <!--<file src="tools\" target="tools" />
    <file src="content\" target="content" />-->
  </files>
</package>

*.nuspec 這個檔案怎麼來的?

我從 Nuget Package Explorer 匯出,如下圖:

Project:https://github.com/NuGetPackageExplorer/NuGetPackageExplorer

Download:https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

 

BUILD

Build

Visual Studio 組建

如下圖:

參考:https://msdn.microsoft.com/en-us/Library/vs/alm/Build/steps/build/visual-studio-build

Visual Studio 測試

如下圖:

參考:https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/VsTest/README.md

編制來源索引及發行符號

如下圖:

 

Nuget 封裝程式

  • nuspec 檔的路徑/模式:**\*.nuspec;若選擇專案檔,不需要自訂 .nuspec,就能打包 Nuget Package 了,但能調整的屬性不多
  • 封裝資料夾:$(Build.BinariesDirectory)
  • 封裝組態: Release
  • NuGet 引數:-Version $(Build.BuildNumber),我打包出來的 Nuget Package 會帶上組建版本

如下圖:

參考:https://msdn.microsoft.com/en-us/Library/vs/alm/Build/steps/package/nuget-packager

 

複製檔案

  • 來源資料夾:$(Build.BinariesDirectory)
  • 內容:**\*          
  • 目標資料夾:$(build.artifactstagingdirectory)

如下圖:

參考:https://msdn.microsoft.com/en-us/Library/vs/alm/Build/steps/utility/copy-files

 

發行組建成品

參考:https://msdn.microsoft.com/en-us/Library/vs/alm/Build/steps/utility/publish-build-artifacts

 

Variables

若變數是機密資訊,記得上鎖,如下圖:

參考:https://msdn.microsoft.com/Library/vs/alm/Build/scripts/variables

 

Triggers

 

RELEASE

Environments

Deploy Internal Nuget
Nuget 發行者
  • nupkg 的路徑/模式:**\*.nupkg
  • 內部摘要 URL:$(NugetUrl)
  • NuGet 引數:-ApiKey $(ApiKey),這是發行到 Nuget Server 的授權碼。

如下圖:

部署觸發條件

如下圖:

 

Artifacts

很重要的設定,選擇成品的來源

Configuration

在這裡設置變數,機密的資訊可以上鎖

更多的內建參數:https://msdn.microsoft.com/Library/vs/alm/Release/author-release-definition/understanding-tasks#predefvariables

Tiggers

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo