您如何部署您的 .NET Web 應用程序?(請推薦!)
我們最近將我們的 ASP.NET網站升級為一個Web 應用程序,我們對部署它時突然出現的困難感到震驚。考慮到這一定是一項多麼普遍的任務,我想知道人們使用哪些外掛/軟體來部署快速發展的遠端儲存項目(即網站)?
除了在Visual Studio中“發布”然後必須手動 FTP 更改已更改的文件之外,必須有更好的方法嗎?尤其是因為當我們上傳我們的 .DLL 時網站出現故障。
有很多繁瑣的文件異常,我寧願盡可能地自動化這個過程,以防止意外上傳。
使用我們的舊解決方案(在我們的網站上),我們使用了 Dispatch for ASP,它完全震撼並讓整個過程一鍵完成。不幸的是,它對 DLL 來說不是很好(如前所述)。
那麼你的團隊是如何做到的呢?
感謝您的任何建議。
PS - 我讀過 Visual Studio 2010 應該解決 VS2005/08 中的這些缺點,但在那之前……
我強烈推薦使用持續集成。
我們使用TeamCity for CI、Rake和Albacore的組合來自動化建構。
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 任務。