Skip to content

Instantly share code, notes, and snippets.

@domgreen
Created April 26, 2011 13:13
Show Gist options
  • Save domgreen/942233 to your computer and use it in GitHub Desktop.
Save domgreen/942233 to your computer and use it in GitHub Desktop.
rake version of automated deployment scripts for Windows Azure
# 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