function deploy($bucket, $src, $dest, $count = 0) { global $client; try { $client->putObjectFromFile($bucket, $src, $dest); } catch (Exception $e) { echo "Deloy Error " . $e->getMessage(); // 重试两次 if ($count < 2) { echo "Now retry..."; sleep(2); deploy($bucket, $src, $dest, $count + 1); } } }
function cliMain($argv) { $argc = count($argv); if ($argc < 2) { die("Usage: zombie.php <action> <option=value> ...\n" . "Availabe actions:\n" . "\tcompile\n" . "\tcreate-app\n"); } $action = $argv[1]; $options = array(); for ($i = 2; $i < $argc; ++$i) { $opt = explode("=", $argv[$i], 2); if (count($opt) == 2) { $options[$opt[0]] = $opt[1]; } else { $options[$opt[0]] = true; } } if ($action == "generate-app") { if (!isset($options['app'])) { die("Usage: zombie.php generate-app app=<app name> [template=<template_name>] [option=<value>] ...\n"); } $template = isset($options['template']) ? $options['template'] : 'basic'; $base_dir = "/config/generator"; $template_file = realpath(__DIR__ . "/../config/generator/" . $template) . "/template.php"; if (!file_exists($template_file)) { $base_dir = "/zombie-core/generator/"; $template_file = __DIR__ . "/generator/" . $template . "/template.php"; if (!file_exists($template_file)) { die("unknown template: " . $template . "\n"); } } $app = $options['app']; require_once __DIR__ . "/generator/ZombieTemplate.php"; require $template_file; $template_class = underscoreToClass($template . "_template"); $template = new $template_class($template, $app, $base_dir, $options); $template->run(); } else { if ($action == "compile") { require __DIR__ . "/util/compile/compile.php"; compile($options); } else { if ($action == "migrate") { require __DIR__ . "/util/migrate/migrate.php"; migrate($options); } else { if ($action == "deploy") { require __DIR__ . "/util/deploy.php"; deploy(); } else { if ($action == "install-package") { if (!isset($options['name'])) { die("Usage: zombie.php install-package name=<package name>\n"); } require __DIR__ . "/packages/installer.php"; installPackage($options['name']); } else { if ($action == "kachow") { echo "kachow!\n"; } else { echo "Error: unknown action '" . $action . "'.\n"; } } } } } } }
// fwrite($file, $execution_date); // fclose($file); //} $environment = isset($_GET['env']) ? $_GET['env'] : 'staging'; $pidroles = 'roles.pid'; $piddeploy = 'deploy.pid'; $log_file = 'log/deploy.log'; if (!isRunning($piddeploy) && !isRunning($pidroles)) { echo "executing\n"; installRoles($log_file, $piddeploy); while (isRunning($pidroles)) { sleep(1); echo 'waiting'; ob_flush(); } deploy($environment, $log_file, $piddeploy); } else { echo "already running"; } function installRoles($logFile, $pidFile) { $cmd = 'ansible-galaxy install -r /playbook/requirements.yml -p /roles &'; exec(sprintf("%s > %s 2>&1 & echo \$! >> %s", $cmd, $logFile, $pidFile)); } function deploy($environment, $logFile, $pidFile) { $cmd = "ansible-playbook -i /playbook/{$environment} /playbook/deploy.yml &"; exec(sprintf("%s > %s 2>&1 & echo \$! >> %s", $cmd, $logFile, $pidFile)); } function isRunning($pidfile) {
@extends('layout') @section('content') <div class="panel panel-primary"> <div class="panel-heading"> Deploying {{ $repo->Name }} [{{ $repo->Branch }}] </div> <div class="panel-body"> <?php deploy($repo, $url, $deployKey, $SSHKey); ?> <?php ob_end_flush(); ?> <a href="/">Return to index</a> </div> </div> @endsection