diff --git a/Mage/Task/BuiltIn/Deployment/Releases.php b/Mage/Task/BuiltIn/Deployment/Releases.php new file mode 100644 index 0000000..c07e945 --- /dev/null +++ b/Mage/Task/BuiltIn/Deployment/Releases.php @@ -0,0 +1,39 @@ +_config['deploy']['releases']['enabled'])) { + if ($this->_config['deploy']['releases']['enabled'] == 'true') { + if (isset($this->_config['deploy']['releases']['directory'])) { + $releasesDirectory = $this->_config['deploy']['releases']['directory']; + } else { + $releasesDirectory = 'releases'; + } + if (isset($this->_config['deploy']['releases']['symlink'])) { + $symlink = $this->_config['deploy']['releases']['symlink']; + } else { + $symlink = 'current'; + } + + $currentCopy = $releasesDirectory + . '/' . $this->_config['deploy']['releases']['_id']; + + $result = $this->_runRemoteCommand('ln -sf ' . $currentCopy . ' ' . $symlink); + return $result; + + } else { + return false; + } + } else { + return false; + } + } + +} \ No newline at end of file diff --git a/Mage/Task/BuiltIn/Deployment/Rsync.php b/Mage/Task/BuiltIn/Deployment/Rsync.php index d207dba..4eeaa0f 100644 --- a/Mage/Task/BuiltIn/Deployment/Rsync.php +++ b/Mage/Task/BuiltIn/Deployment/Rsync.php @@ -4,7 +4,15 @@ class Mage_Task_BuiltIn_Deployment_Rsync { public function getName() { - return 'Rsync [built-in]'; + if (isset($this->_config['deploy']['releases']['enabled'])) { + if ($this->_config['deploy']['releases']['enabled'] == 'true') { + return 'Rsync (with Releases) [built-in]'; + } else { + return 'Rsync [built-in]'; + } + } else { + return 'Rsync [built-in]'; + } } public function run() @@ -22,11 +30,28 @@ class Mage_Task_BuiltIn_Deployment_Rsync } else { $userExcludes = array(); } + + // If we are working with releases + $deployToDirectory = $this->_config['deploy']['deploy-to']; + if (isset($this->_config['deploy']['releases']['enabled'])) { + if ($this->_config['deploy']['releases']['enabled'] == 'true') { + if (isset($this->_config['deploy']['releases']['directory'])) { + $releasesDirectory = $this->_config['deploy']['releases']['directory']; + } else { + $releasesDirectory = 'releases'; + } + + $deployToDirectory = rtrim($this->_config['deploy']['deploy-to'], '/') + . '/' . $releasesDirectory + . '/' . $this->_config['deploy']['releases']['_id']; + $this->_runRemoteCommand('mkdir -p ' . $releasesDirectory . '/' . $this->_config['deploy']['releases']['_id']); + } + } $command = 'rsync -avz ' . $this->_excludes(array_merge($excludes, $userExcludes)) . ' ' . $this->_config['deploy']['deploy-from'] . ' ' - . $this->_config['deploy']['user'] . '@' . $this->_config['deploy']['host'] . ':' . $this->_config['deploy']['deploy-to']; + . $this->_config['deploy']['user'] . '@' . $this->_config['deploy']['host'] . ':' . $deployToDirectory; $result = $this->_runLocalCommand($command); diff --git a/Mage/Task/Deploy.php b/Mage/Task/Deploy.php index b8178a8..43c409a 100644 --- a/Mage/Task/Deploy.php +++ b/Mage/Task/Deploy.php @@ -2,6 +2,12 @@ class Mage_Task_Deploy { private $_config = null; + private $_releaseId = null; + + public function __construct() + { + $this->_releaseId = date('YmdHis'); + } public function run(Mage_Config $config) { @@ -25,6 +31,14 @@ class Mage_Task_Deploy Mage_Console::output('Deploying to ' . $host . ''); $tasksToRun = $config->getTasks(); + if (isset($taskConfig['deploy']['releases'])) { + if (isset($taskConfig['deploy']['releases']['enabled'])) { + if ($taskConfig['deploy']['releases']['enabled'] == 'true') { + $taskConfig['deploy']['releases']['_id'] = $this->_releaseId; + array_push($tasksToRun, 'deployment/releases'); + } + } + } if (count($tasksToRun) == 0) { Mage_Console::output('Warning! No Deployment tasks defined.', 2); Mage_Console::output('Deployment to ' . $host . ' skipped!', 1, 3); diff --git a/docs/example-config/.mage/config/environment/production.yaml b/docs/example-config/.mage/config/environment/production.yaml index 83a25a7..b014783 100644 --- a/docs/example-config/.mage/config/environment/production.yaml +++ b/docs/example-config/.mage/config/environment/production.yaml @@ -3,9 +3,9 @@ user: root deploy-from: ./ deploy-to: /var/www/vhosts/example.com/www releases: - - enabled: true - - symlink: current - - directory: releases + enabled: true + symlink: current + directory: releases hosts: - s01.example.com - s02.example.com