@servers(['localhost' => '127.0.0.1']) @setup if (empty($repository)) { throw new Exception("Need --repository param", 1); } if (empty($app_dir)) { throw new Exception("Need --app_dir param", 1); } if (empty($app_user)) { throw new Exception("Need --app_user param", 1); } if (empty($branch)) { $branch = 'master'; } $releases_dir = $app_dir . '/releases'; $storage_dir = $app_dir . '/storage'; $public_vendor_dir = $app_dir . '/vendor'; $release_no = date('YmdHis'); $new_release_dir = $releases_dir .'/'. $release_no; @endsetup @story('deploy') clone_repository run_composer update_symlinks change_owner @endstory @task('clone_repository') echo 'Cloning repository' [ -d {{ $app_dir }} ] || mkdir {{ $app_dir }} [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }} @if($commit) echo '克隆分支 {{ $branch }} 提交 ID {{ $commit }} 到 {{ $new_release_dir }}' mkdir {{ $new_release_dir }} cd {{ $new_release_dir }} git init git remote add origin {{ $repository }} git fetch --depth 1 origin {{ $commit }} git checkout FETCH_HEAD @else echo '克隆分支 {{ $branch }} 到 {{ $new_release_dir }}' git clone -b {{ $branch }} --depth 1 {{ $repository }} {{ $new_release_dir }} @endif @endtask @task('run_composer') echo "Starting deployment ({{ $release_no }})" cd {{ $new_release_dir }} composer install --prefer-dist --no-scripts -q -o @endtask @task('update_symlinks') echo "Linking storage directory" rm -rf {{ $new_release_dir }}/storage if [ ! -d {{ $storage_dir }} ]; then mkdir {{ $storage_dir }} mkdir {{ $storage_dir }}/framework mkdir {{ $storage_dir }}/framework/cache mkdir {{ $storage_dir }}/framework/sessions mkdir {{ $storage_dir }}/framework/views fi ln -nfs {{ $storage_dir }} {{ $new_release_dir }}/storage if [ ! -d {{ $public_vendor_dir }} ]; then mkdir {{ $public_vendor_dir }} fi ln -nfs {{ $public_vendor_dir }} {{ $new_release_dir }}/public/vendor echo 'Linking current release' ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current echo 'Linking .env file' if [ ! -f {{ $app_dir }}/.env ]; then cp {{ $new_release_dir }}/.env.example {{ $app_dir }}/.env ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env cd {{ $app_dir }}/current && php artisan key:generate else ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env cd {{ $app_dir }}/current && php artisan migrate fi @endtask @task('change_owner') chown -R {{ $app_user }} {{ $app_dir }} chown -R {{ $app_user }} {{ $releases_dir }} chown -R {{ $app_user }} {{ $storage_dir }} chown -R {{ $app_user }} {{ $new_release_dir }} @endtask