ฉันขอแนะนำอย่างยิ่งให้ใช้การรวมต่อเนื่อง
เราใช้การรวมกันของTeamCityสำหรับ CI, RakeและAlbacoreสำหรับการสร้างอัตโนมัติ
TeamCity จะตรวจสอบโค้ดจากที่เก็บซอร์สโค้ดของคุณจากนั้นใช้ Rake สร้างแอปพลิเคชันดำเนินการทดสอบหน่วยและแม้แต่เรียกใช้สคริปต์ฐานข้อมูลของคุณหากคุณต้องการ หลังจากสร้างสำเร็จคุณสามารถแพ็คเกจซอร์สโค้ดของคุณในไฟล์ zip หรือคัดลอกไปยังปลายทางที่คุณเลือก
เราใช้ Git แม้ว่า TeamCity จะทำงานกับระบบควบคุมแหล่งที่มาทั้งหมด
การใช้ TeamCity และ Rake จะคล้ายกับการใช้ CruiseControl และ NANT โดยไม่ต้องแก้ไขไฟล์ XML แน่นอนคุณสามารถใช้ TeamCity กับ NANT ได้หากต้องการ
ตัวอย่างสั้น ๆ ที่ดึงมาจาก rakefile.rb ซึ่งดำเนินการสร้าง IMHO อ่านและตรวจแก้จุดบกพร่องได้ง่ายกว่าไฟล์ 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 เป็นชุดของงาน Rake ที่สร้างโดยเฉพาะสำหรับการปรับใช้แอปพลิเคชั่น. NET