續上篇,[TFS 2015] 實作 Build vNext + Release 自動部署至內部網站
我使用了 Build vNext + Release 將網站部署到了測試環境,缺少了網站所需要的資料庫,這裡我整理了一些手自動部署的方法
自動部署資料庫,要看團隊內的開發流程不適合使用,使用時要注意一下
本文連結
伺服器環境
- Windows 2012 Datacenter x64 中文版
- TFS 2015 Update 2.1 中文版
開發環境
- Windows 10 x64 中文版
- VS 2015 Update 1 英文版
- SQL Server DataProject
手動部署
透過資料庫專案發行資料庫
如下圖:
透過網站應用程式 Publish 發行資料庫
如下圖:
目標網站必須要有 Web Deploy Service
https://dotblogs.com.tw/yc421206/archive/2013/03/15/96849.aspx
https://dotblogs.com.tw/yc421206/2014/01/21/141965
http://www.iis.net/learn/publish/using-web-deploy/configure-the-web-deployment-handler
使用指令碼部署
這裡我整理幾個我知道的方法
透過 MsBuild.exe 發行資料庫
為了排版所以斷行,msbuild 後面接的參數要在同一行,
set msbuild="%ProgramFiles(x86)%\MSBuild\14.0\Bin\msbuild.exe"
%msbuild% SQL Project Name.sqlproj
/target:SqlDeploy
/p:UseSandboxSettings=False
/p:TargetDatabaseName=Database Name
/p:TargetConnectionString="Data Source=(localdb)\mssqllocaldb;Integrated Security=True;Pooling=False"
/p:DeployScriptFileName=ScriptFileName.sql
/p:IncludeCompositeObjects=True
/p:BlockOnPossibleDataLoss=True
/p:CompareUsingTargetCollation=False
/p:CreateNewDatabase=True
/p:DeployDatabaseInSingleUserMode=False
透過 MsDeploy.exe 發行資料庫
由於犯懶,所以沒實作它,請參考以下:
https://technet.microsoft.com/zh-tw/library/dd569036(v=ws.10).aspx
透過 SqlPackage.exe 發行、比對資料庫
不同版本的 SqlPackage.exe 路徑會不一樣,要選擇正確的路徑
發行資料庫
為了排版所以斷行,sqlPackage 後面接的參數要在同一行
/SourceFile:這個參數吃 *.dacpac,Sql Server Database Build 會產生 ProjectName.dacpac
將以下內容存放在 TFS or Build Agent 的路徑下 C:\TfsBuildTasks\SqlDeployTask\Deploy.bat
@echo off
set server=%1
set databaseName=%2
set id=%3
set password=%4
set sourceFile=%5
set args=%6
set sqlPackage="%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage.exe"
echo sqlPackage = %sqlPackage%
echo server = %server%
echo databaseName = %databaseName%
echo id = %id%
echo sourceFile = %sourceFile%
%sqlPackage%
/Action:Publish
/SourceFile:%sourceFile%
/TargetConnectionString:"data source=%server%;initial catalog=%databaseName%;User Id=%id%;Password=%password%;"
%args%
調用時傳入相關參數,這裡我用『批次指令碼』 調用 Deploy.bat
比對資料庫
把 /Action:Publish 換成 /Action:Script
將以下內容存放在 TFS or Build Agent 的路徑下 C:\TfsBuildTasks\SqlDeployTask\Compare.bat
@echo off
set server=%1
set databaseName=%2
set id=%3
set password=%4
set sourceFile=%5
set outputFile=%6
set sqlPackage="%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage.exe"
echo server = %1
echo databaseName = %2
echo id = %3
echo sourceFile = %5
echo outputFile = %6
echo sqlPackage = %sqlPackage%
%sqlPackage%
/Action:Script
/Quiet:true
/TargetServerName:"%server%"
/TargetDatabaseName:"%databaseName%"
/TargetUser:"%id%"
/TargetPassword:"%password%"
/SourceFile:"%sourceFile%"
/OutputPath:"%outputFile%"
/p:ScriptDatabaseCompatibility=false
/p:BlockOnPossibleDataLoss=false
/p:ExcludeObjectTypes=DatabaseRoles
調用時傳入相關參數,這裡我用『批次指令碼』 調用 Compare.bat
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET