Iis

您如何部署您的 .NET Web 應用程序?(請推薦!)

  • February 24, 2010

我們最近將我們的 ASP.NET網站升級為一個Web 應用程序,我們對部署它時突然出現的困難感到震驚。考慮到這一定是一項多麼普遍的任務,我想知道人們使用哪些外掛/軟體來部署快速發展的遠端儲存項目(即網站)?

除了在Visual Studio中“發布”然後必須手動 FTP 更改已更改的文件之外,必須有更好的方法嗎?尤其是因為當我們上傳我們的 .DLL 時網站出現故障。

有很多繁瑣的文件異常,我寧願盡可能地自動化這個過程,以防止意外上傳。

使用我們的舊解決方案(在我們的網站上),我們使用了 Dispatch for ASP,它完全震撼並讓整個過程一鍵完成。不幸的是,它對 DLL 來說不是很好(如前所述)。

那麼你的團隊是如何做到的呢?

感謝您的任何建議。

PS - 我讀過 Visual Studio 2010 應該解決 VS2005/08 中的這些缺點,但在那之前……

我強烈推薦使用持續集成。

我們使用TeamCity for CI、RakeAlbacore的組合來自動化建構。

TeamCity 將從您的原始碼儲存庫中檢查程式碼,然後使用 Rake,建構應用程序,執行單元測試,甚至如果您願意,甚至執行您的數據庫腳本。成功建構後,您可以將原始碼打包為 zip 文件或將其複製到您選擇的目標位置。

我們使用 Git,儘管 TeamCity 適用於所有原始碼控制系統。

使用 TeamCity 和 Rake 與使用 CruiseControl 和 NANT 類似,但無需編輯 XML 文件。當然,如果您願意,可以將 TeamCity 與 NANT 結合使用。

從執行建構的 rakefile.rb 中提取的一個簡短範例。恕我直言,比 XML 文件更易於閱讀和調試。

require 'albacore'
require 'rexml/document'
require 'find'

VERSION_NO = "1.0"

OUTPUT_PATH = "output"
WEBOUTPUT_PATH = "output/web"
ADMINOUTPUT_PATH = "output/admin"

CONFIG = "Release"

WEB_PATH = "app/Company.Website.Web"
ADMIN_PATH = "app/Company.Website.Admin"
PACKAGE_PATH = "build/package"
DB_SCRIPT_PATH = "Company.Website.DB"
SOLUTION = "Company.Website.sln"

ARTIFACTS_PATH = "d:/build/artifacts/"

DEPLOY_WEB_PATH = "d:/deploy/company/website/"
DEPLOY_ADMIN_PATH = "d:/deploy/company/admin/"

task :default => ['setuptest','assemblyinfo','config','msbuild','createdb','sqlcmd','deploy']


task :setuptest do |setup|
 if ENV['BuildNumber'].nil? then ENV['BuildNumber'] = "000" end

 VERSION_NO = VERSION_NO + '.' + ENV['BuildNumber']
 puts 'Version Number : ' + VERSION_NO

 ZIPFILE_WEB = 'Company.Website.Web.' + VERSION_NO
 ZIPFILE_ADMIN = 'Company.Website.Admin.' + VERSION_NO  

 DB_SERVER = "WEB2"
 DB_DATABASE = "Website"  
 CREATEDB_SCRIPT = "app/Company.Website.DB/00CreateDatabaseTEST.sql"
end

 assemblyinfotask do |asm|
   asm.version = VERSION_NO
   asm.company_name = "Company Name"
   asm.copyright = "Copyright 2010"
   asm.output_file = "CommonAssemblyInfo.cs"
 end

 task :config do
   FileUtils.cp 'NHibernate.test.config', 'NHibernate.config'
 end

 msbuildtask do |msb|
   msb.properties = { :configuration => :Debug }
   msb.targets [:Clean, :Build]
   msb.solution = "Company.Website.sln"
 end

 sqlcmdtask :createdb do |sql|
   puts "executing sql scripts..."
   sql.log_level = :verbose
   sql.path_to_command = "sqlcmd.exe"
   sql.server = DB_SERVER
   sql.database = "master"
   sql.scripts << CREATEDB_SCRIPT
 end

 sqlcmdtask do |sql|
   puts "executing sql scripts..."
   sql.log_level = :verbose
   sql.path_to_command = "sqlcmd.exe"
   sql.server = DB_SERVER
   sql.database = DB_DATABASE
   sql.scripts << "app/Company.Website.DB/01CreateTables.sql"
   sql.scripts << "app/Company.Website.DB/02InsertReferenceData.sql"
 end

 task :deployprep do

   FileUtils.remove_dir 'app/Company.Website.Web/obj'
   FileUtils.remove_dir 'app/Company.Website.Admin/obj'

 end

 ziptask :zipweb do |zip|
   puts "creating zip package in " + ZIPFILE_WEB
   zip.directories_to_zip = ["app/Company.Website.Web"]
   zip.output_file = ZIPFILE_WEB  + '.zip'
   zip.output_path = File.dirname(__FILE__)
 end

 ziptask :zipadmin do |zip|
     puts "creating zip package in " + ZIPFILE_ADMIN
   zip.directories_to_zip = ["app/Company.Website.Admin"]
   zip.output_file = ZIPFILE_ADMIN  + '.zip'
   zip.output_path = File.dirname(__FILE__)
 end  

Albacore 是一套專門為部署 .NET 應用程序而建構的 Rake 任務。

引用自:https://serverfault.com/questions/92084