Adds general.yml parameter "ssh_needs_tty" which appends "-t" to the ssh

command
Adds deployment parameter "rsync: { copy: yes }" which copies the prior
release then rsync's (to increase speed)
This commit is contained in:
mikec 2014-01-28 21:43:43 -05:00
parent 5cc9c02c3e
commit e7d8d5ce68
3 changed files with 36 additions and 14 deletions

View file

@ -73,13 +73,15 @@ class InitCommand extends AbstractCommand
'%notificationEnabled%', '%notificationEnabled%',
'%loggingEnabled%', '%loggingEnabled%',
'%maxlogs%', '%maxlogs%',
'%ssh_needs_tty%',
), ),
array( array(
$projectName, $projectName,
$notificationEmail, $notificationEmail,
$notificationEnabled, $notificationEnabled,
'true', 'true',
30 30,
'false'
), ),
$this->getGeneralConfigTemplate() $this->getGeneralConfigTemplate()
); );
@ -98,8 +100,9 @@ class InitCommand extends AbstractCommand
. 'email: %notificationEmail%' . PHP_EOL . 'email: %notificationEmail%' . PHP_EOL
. 'notifications: %notificationEnabled%' . PHP_EOL . 'notifications: %notificationEnabled%' . PHP_EOL
. 'logging: %loggingEnabled%' . PHP_EOL . 'logging: %loggingEnabled%' . PHP_EOL
. 'maxlogs: %maxlogs%' . PHP_EOL; . 'maxlogs: %maxlogs%' . PHP_EOL
. 'ssh_needs_tty: %ssh_needs_tty%' . PHP_EOL;
return $template; return $template;
} }
} }

View file

@ -179,17 +179,20 @@ abstract class AbstractTask
$releasesDirectory = ''; $releasesDirectory = '';
} else { } else {
$releasesDirectory = '/' $releasesDirectory = '/'
. $this->getConfig()->release('directory', 'releases') . $this->getConfig()->release('directory', 'releases')
. '/' . '/'
. $this->getConfig()->getReleaseId(); . $this->getConfig()->getReleaseId();
} }
} else { } else {
$releasesDirectory = ''; $releasesDirectory = '';
} }
// if general.yml includes "ssy_needs_tty: true", then add "-t" to the ssh command
$needs_tty = ($this->getConfig()->general('ssh_needs_tty',false) ? "-t" : "");
$localCommand = 'ssh -p ' . $this->getConfig()->getHostPort() . ' ' $localCommand = 'ssh ' . $needs_tty . ' -p ' . $this->getConfig()->getHostPort() . ' '
. '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' . '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no '
. $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName() . ' ' . $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName() . ' '
. '"cd ' . rtrim($this->getConfig()->deployment('to'), '/') . $releasesDirectory . ' && ' . '"cd ' . rtrim($this->getConfig()->deployment('to'), '/') . $releasesDirectory . ' && '
@ -213,4 +216,4 @@ abstract class AbstractTask
return $this->runCommandLocal($command, $output); return $this->runCommandLocal($command, $output);
} }
} }
} }

View file

@ -30,7 +30,12 @@ class RsyncTask extends AbstractTask implements IsReleaseAware
if ($this->getConfig()->getParameter('overrideRelease', false) == true) { if ($this->getConfig()->getParameter('overrideRelease', false) == true) {
return 'Deploy via Rsync (with Releases override) [built-in]'; return 'Deploy via Rsync (with Releases override) [built-in]';
} else { } else {
return 'Deploy via Rsync (with Releases) [built-in]'; $rsync_copy = $this->getConfig()->deployment("rsync");
if ( $rsync_copy && is_array($rsync_copy) && $rsync_copy['copy'] ) {
return 'Deploy via Rsync (with Releases) [built-in, incremental]';
} else {
return 'Deploy via Rsync (with Releases) [built-in]';
}
} }
} else { } else {
return 'Deploy via Rsync [built-in]'; return 'Deploy via Rsync [built-in]';
@ -58,8 +63,8 @@ class RsyncTask extends AbstractTask implements IsReleaseAware
'.svn', '.svn',
'.mage', '.mage',
'.gitignore', '.gitignore',
'.gitkeep', '.gitkeep',
'nohup.out' 'nohup.out'
); );
// Look for User Excludes // Look for User Excludes
@ -73,7 +78,18 @@ class RsyncTask extends AbstractTask implements IsReleaseAware
$deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/') $deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/')
. '/' . $releasesDirectory . '/' . $releasesDirectory
. '/' . $this->getConfig()->getReleaseId(); . '/' . $this->getConfig()->getReleaseId();
$this->runCommandRemote('mkdir -p ' . $releasesDirectory . '/' . $this->getConfig()->getReleaseId()); $resultFetch = $this->runCommandRemote('ls -ld current | cut -d"/" -f2', $releaseToOverride);
if ( $resultFetch ) {
// If deployment configuration is rsync, include a flag to simply sync the deltas between the prior release
// rsync: { copy: yes }
$rsync_copy = $this->getConfig()->deployment("rsync");
if ( $rsync_copy && is_array($rsync_copy) && $rsync_copy['copy'] ) {
$this->runCommandRemote('cp -R ' . $releasesDirectory . '/' . $releaseToOverride . ' ' . $releasesDirectory . '/' . $this->getConfig()->getReleaseId());
} else {
$this->runCommandRemote('mkdir -p ' . $releasesDirectory . '/' . $this->getConfig()->getReleaseId());
}
}
} }
$command = 'rsync -avz ' $command = 'rsync -avz '
@ -137,4 +153,4 @@ class RsyncTask extends AbstractTask implements IsReleaseAware
$excludesRsync = trim($excludesRsync); $excludesRsync = trim($excludesRsync);
return $excludesRsync; return $excludesRsync;
} }
} }