Created
April 26, 2011 13:13
-
-
Save domgreen/942233 to your computer and use it in GitHub Desktop.
rake version of automated deployment scripts for Windows Azure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Top-level directories | |
SOURCE_DIR = ".." | |
PROJECT_NAME = "Demo" | |
# Local build and test | |
AZURE_SLN = "#{SOURCE_DIR}/#{PROJECT_NAME}.sln" | |
OUT_DIR = "bin/Debug/" | |
PUBLISH_LOCATION = "#{OUT_DIR}Publish/" | |
CSDEF = "ServiceDefinition.csdef" | |
CSCFG = "ServiceConfiguration.cscfg" | |
WORKER_ROLE_DIR = "#{SOURCE_DIR}/WorkerRole1/bin/Debug/" | |
WORKER_ROLE_DLL = "WorkerRole1.dll" | |
WEB_ROLE_DIR = "#{SOURCE_DIR}/WebRole1" | |
# Deploy Type | |
task_is_a_cloud_deploymet = false | |
# Tools | |
MSBUILD_EXE = "#{ENV['windir']}/Microsoft.NET/Framework/v4.0.30319/msbuild.exe" | |
PACKAGE_UPLOADER_EXE = "#{SOURCE_DIR}/Build/AzurePackageUploader.exe" | |
# Azure Storge | |
ACCOUNT_CONNECTION_STRING = "..." | |
BLOB_STORAGE_ENDPOINT = "..." | |
# HOSTED SERVICE VARIABLES | |
HOSTED_SERVICE = "testcloudproject" | |
DEPLOYMENT_SLOT = "production" | |
DEPLOYMENT_LABEL = "test" | |
# DEPLOYMENT STATUS | |
SUSPENDED_STATUS = "suspended" | |
RUNNING_STATUS = "running" | |
CSPKG_FILE = "#{PUBLISH_LOCATION}#{PROJECT_NAME}.cspkg" | |
# DEPLOYMENT COMMANDS | |
UPDATE_STATUS_COMMAND = "csmanage /update-deployment /hosted-service:#{HOSTED_SERVICE} /slot:#{DEPLOYMENT_SLOT}" | |
SUSPEND_COMMAND = "#{UPDATE_STATUS_COMMAND} /status:#{SUSPENDED_STATUS}" | |
DELETE_COMMAND = "csmanage /delete-deployment /hosted-service:#{HOSTED_SERVICE} /slot:#{DEPLOYMENT_SLOT}" | |
CREATE_COMMAND = "csmanage /create-deployment /hosted-service:#{HOSTED_SERVICE} /slot:#{DEPLOYMENT_SLOT} /name:#{HOSTED_SERVICE} /label:#{DEPLOYMENT_LABEL} /package:#{BLOB_STORAGE_ENDPOINT}packages/#{PROJECT_NAME}.cspkg /config:#{PUBLISH_LOCATION}ServiceConfiguration.cscfg" | |
RUN_COMMAND = "#{UPDATE_STATUS_COMMAND} /status:#{RUNNING_STATUS}" | |
#LOCAL COMMANDS | |
STOP_LOCAL_DEV_FABRIC = "csrun /devfabric:shutdown" | |
RUN_LOCAL_DEV_FABRIC = "csrun /run:#{OUT_DIR}#{PROJECT_NAME}.csx;ServiceConfiguration.cscfg /launchbrowser" | |
task :default => :deploy_azure | |
task :deploy_azure do | |
if task_is_a_cloud_deploymet | |
deploy_to_cloud | |
else | |
deploy_locally | |
end | |
end | |
task :deploy_azure_local do | |
deploy_locally | |
end | |
task :deploy_azure_cloud do | |
deploy_to_cloud | |
end | |
def deploy_to_cloud | |
exec "cspack #{CSDEF} /role:WorkerRole1;#{WORKER_ROLE_DIR};#{WORKER_ROLE_DLL} /role:WebRole1;#{WEB_ROLE_DIR} /sites:WebRole1; Web;c:\web /out:#{CSPKG_FILE}" | |
exec "#{PACKAGE_UPLOADER_EXE} #{CSPKG_FILE} #{ACCOUNT_CONNECTION_STRING}" | |
exec "#{SUSPEND_COMMAND}" | |
exec "#{DELETE_COMMAND}" | |
exec "#{CREATE_COMMAND}" | |
exec "#{RUN_COMMAND}" | |
end | |
def deploy_locally | |
#need to do a local CSPack Command | |
exec "#{STOP_LOCAL_DEV_FABRIC}" | |
exec "#{RUN_LOCAL_DEV_FABRIC}" | |
end | |
def exec(cmdline, error_message = "system call failed: #{cmdline}") | |
puts | |
puts cmdline | |
result = "" | |
IO.popen(cmdline) do |output| | |
output.each do |line| | |
puts " #{line}" | |
result += line | |
end | |
end | |
return result | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment