Last active
August 29, 2015 14:03
-
-
Save MakoTano/48824c372ad5e15897ad to your computer and use it in GitHub Desktop.
sample config about cakephp deployment using altax. (But I use it in real)
This file contains hidden or 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
<?php | |
// Altax - http://kohkimakimoto.github.io/altax/ | |
// Autoloading for plugin command classes. | |
if (is_file(__DIR__ . '/vendor/autoload.php')) require_once __DIR__ . '/vendor/autoload.php'; | |
// *************************************************************** | |
// Server definition. - change here. | |
// *************************************************************** | |
Server::nodesFromSSHConfigHosts(); | |
CONST PRODUCTION_SERVER_SSH_STRING = "name_of_ssh_config"; | |
CONST BASE_PATH = "/var/www/html"; | |
$env['release'] = BASE_PATH."/releases"; | |
$env['publish'] = BASE_PATH."/current"; | |
$env['logs'] = BASE_PATH."/cake_logs"; | |
$env['repository'] = "[email protected]:user_name/repository_name.git"; | |
$env['prod_configs'] = array('database.php', 'core.php'); | |
$env['locale'] = 'Asia/Tokyo'; | |
// *************************************************************** | |
// Task definition. | |
// *************************************************************** | |
Task::register('deploy', function($task) use ($env){ | |
$task->exec(function($process) use ($env){ | |
date_default_timezone_set($env['locale']); | |
$now = date('Y_m_d_His'); | |
$env['release'] = "{$env['release']}/{$now}"; | |
$process->run("git clone {$env['repository']} {$env['release']}"); | |
generate_sybolic_links($process, $env); | |
clear_cake_caches($process, $env); | |
switch_to_production_config($process, $env); | |
switch_to_production_environment($process, $env); | |
echo "Finish deploying.\n"; | |
}, array(PRODUCTION_SERVER_SSH_STRING)); | |
})->description("Deploy master repogitory."); | |
function generate_sybolic_links($process, $env){ | |
$process->run( array( | |
"cd {$env['release']}/app/tmp/", | |
"rm -rf logs", | |
"ln -s {$env['logs']}/logs logs" | |
) | |
); | |
return; | |
} | |
function clear_cake_caches($process, $env){ | |
$process->run( array( | |
"chmod -R 0777 {$env['release']}/app/tmp", | |
"rm -rf {$env['release']}/app/tmp/cache/models/myapp_*", | |
"rm -rf {$env['release']}/app/tmp/cache/persistent/myapp_*", | |
"rm -rf {$env['release']}/app/tmp/cache/views/myapp_*", | |
) | |
); | |
return; | |
} | |
function switch_to_production_config($process, $env){ | |
foreach ($env['prod_configs'] as $config) { | |
$process->run( array( | |
"cd {$env['release']}/app/Config", | |
"rm -rf {$config}", | |
"ln -s prod/{$config} {$config}" | |
) | |
); | |
} | |
return; | |
} | |
function switch_to_production_environment($process, $env){ | |
$process->run("rm -f {$env['publish']}; ln -s {$env['release']} {$env['publish']}"); | |
return; | |
} | |
Task::register('rollback', function($task) use ($env){ | |
$task->exec(function($process) use ($env){ | |
// the latest version, which you want to rollback | |
$latest = get_latest($env); | |
echo 'latest version: ' . $latest . "\n"; | |
// the previous version, which you want to activate | |
$prev = get_prev($env, $latest); | |
if (empty($prev)) { | |
echo "There's no previous version. finished.\n"; | |
exit; | |
} | |
echo 'previous version: ' . $prev . "\n"; | |
// switch to previous version. | |
date_default_timezone_set($env['locale']); | |
$env_lastest = "{$env['release']}/{$latest}"; | |
$env['release'] = "{$env['release']}/{$prev}"; | |
generate_sybolic_links($process, $env); | |
clear_cake_caches($process, $env); | |
switch_to_production_config($process, $env); | |
switch_to_production_environment($process, $env); | |
// delete the latest version. -- it has troubles. | |
$process->run("rm -rf {$env_lastest}"); | |
echo "Finisih rollbacking.\n"; | |
}, array(PRODUCTION_SERVER_SSH_STRING)); | |
})->description("Rollback to previous version."); | |
function get_latest($env){ | |
$str = $process->run("readlink {$env['publish']}"); | |
$str = str_replace("{$env['release']}/", '', $str); | |
$str = str_replace("\n", '', $str); | |
return $str; | |
} | |
function get_prev($env, $latest){ | |
$releases = $process->run("ls -t {$env['release']}"); | |
$releases = explode("\n", $releases); | |
$found = false; | |
$prev = null; | |
foreach ($releases as $release) { | |
$release = trim($release); | |
if ($found) { | |
$prev = $release; | |
break; | |
} | |
if ($release == $latest) $found = true; | |
} | |
return $prev; | |
} | |
Task::register('hist', function($task) use ($env){ | |
$task->exec(function($process) use ($env){ | |
echo "The List of deployed folders.\n"; | |
$releases = $process->run("ls -t {$env['release']}"); | |
}, array(PRODUCTION_SERVER_SSH_STRING)); | |
})->description("Show the folder names which in release folder."); | |
Task::register('clean', function($task) use ($env){ | |
$task->exec(function($process) use ($env){ | |
$releases = $process->run("ls -t {$env['release']}"); | |
$releases = rtrim($releases, "\n"); | |
$releases = explode("\n", $releases); | |
foreach ($releases as $key => $release) { | |
if ($key > 4) { | |
$release = trim($release); | |
$process->run("rm -rf {$env['release']}/{$release}"); | |
} | |
} | |
}, array(PRODUCTION_SERVER_SSH_STRING)); | |
})->description("Clean release directory without 5 histories."); |
32: $process->run("git clone {$env['repository']} {$env['release']}");
↓
$process->run("git clone --depth 1 {$env['repository']} {$env['release']}");
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Please tell me bugs, miss-spellings, your opinion here.