以往,我都是使用用 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
在這裡設置變數,機密的資訊可以上鎖
Tiggers
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET