From 6d46aaff84c0de8bc7165b7de9bb834e7dc570c6 Mon Sep 17 00:00:00 2001 From: Tsukasa Kanzaki Date: Mon, 15 Jul 2019 07:39:43 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=86=85=E7=BD=91=20gitlab=20runner=20?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=88=B0=E5=A4=96=E7=BD=91=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Envoy.blade.php | 97 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/Envoy.blade.php b/Envoy.blade.php index 860574a..4087e3e 100644 --- a/Envoy.blade.php +++ b/Envoy.blade.php @@ -1,4 +1,8 @@ -@servers(['localhost' => '127.0.0.1']) +@if($remote) + @servers(['localhost' => '127.0.0.1', 'remote' => $remote]) +@else + @servers(['localhost' => '127.0.0.1']) +@endif @setup if (empty($repository)) { @@ -17,21 +21,45 @@ $branch = 'master'; } + $release_no = date('YmdHis'); + $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; + + if ($remote) { + if (empty($remote_dir)) { + throw new Exception('Need --remote_dir param', 1); + } + + if (empty($remote_app_user)) { + throw new Exception('Need --remote_dir param', 1); + } + + $remote_releases_dir = $remote_dir . '/releases'; + $remote_storage_dir = $remote_dir . '/storage'; + $remote_public_vendor_dir = $remote_dir . '/vendor'; + $remote_new_release_dir = $remote_releases_dir .'/'. $release_no; + } + @endsetup @story('deploy') clone_repository + @if($remote) + ssh_create_release_dir + ssh_copy_to_remote + run_composer_on_remote + update_symlinks_on_remote + change_owner_on_remote + @endif run_composer update_symlinks change_owner @endstory -@task('clone_repository') +@task('clone_repository', ['on' => 'localhost']) echo 'Cloning repository' [ -d {{ $app_dir }} ] || mkdir {{ $app_dir }} [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }} @@ -51,13 +79,13 @@ @endtask -@task('run_composer') +@task('run_composer', ['on' => 'localhost']) echo "Starting deployment ({{ $release_no }})" cd {{ $new_release_dir }} composer install --prefer-dist --no-scripts -q -o @endtask -@task('update_symlinks') +@task('update_symlinks', ['on' => 'localhost']) echo "Linking storage directory" rm -rf {{ $new_release_dir }}/storage @@ -89,9 +117,66 @@ fi @endtask -@task('change_owner') +@task('change_owner', ['on' => 'localhost']) 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 + +{{-- Remote --}} +@task('ssh_create_release_dir', ['on' => 'remote']) + echo 'Create remote directory via ssh' + [ -d {{ $remote_dir }} ] || mkdir {{ $remote_dir }} + [ -d {{ $remote_releases_dir }} ] || mkdir {{ $remote_releases_dir }} +@endtask + +@task('ssh_copy_to_remote', ['on' => 'localhost']) + echo 'Copy code file to remote via ssh' + scp -BCqr {{ $new_release_dir }} {{ $remote }}:{{ $remote_releases_dir }} +@endtask + +@task('run_composer_on_remote', ['on' => 'remote']) + echo "Starting deployment ({{ $release_no }}) on remote" + cd {{ $remote_new_release_dir }} + composer install --prefer-dist --no-scripts -q -o +@endtask + +@task('update_symlinks_on_remote', ['on' => 'remote']) + echo "Linking storage directory" + rm -rf {{ $remote_new_release_dir }}/storage + + if [ ! -d {{ $remote_storage_dir }} ]; then + mkdir {{ $remote_storage_dir }} + mkdir {{ $remote_storage_dir }}/framework + mkdir {{ $remote_storage_dir }}/framework/cache + mkdir {{ $remote_storage_dir }}/framework/sessions + mkdir {{ $remote_storage_dir }}/framework/views + fi + ln -nfs {{ $remote_storage_dir }} {{ $remote_new_release_dir }}/storage + + if [ ! -d {{ $remote_public_vendor_dir }} ]; then + mkdir {{ $remote_public_vendor_dir }} + fi + ln -nfs {{ $remote_public_vendor_dir }} {{ $remote_new_release_dir }}/public/vendor + + echo 'Linking current release' + ln -nfs {{ $remote_new_release_dir }} {{ $remote_dir }}/current + + echo 'Linking .env file' + if [ ! -f {{ $remote_dir }}/.env ]; then + cp {{ $remote_new_release_dir }}/.env.example {{ $remote_dir }}/.env + ln -nfs {{ $remote_dir }}/.env {{ $remote_new_release_dir }}/.env + cd {{ $remote_dir }}/current && php artisan key:generate + else + ln -nfs {{ $remote_dir }}/.env {{ $remote_new_release_dir }}/.env + cd {{ $remote_dir }}/current && php artisan migrate + fi +@endtask + +@task('change_owner_on_remote', ['on' => 'remote']) + chown -R {{ $remote_app_user }} {{ $remote_dir }} + chown -R {{ $remote_app_user }} {{ $remote_releases_dir }} + chown -R {{ $remote_app_user }} {{ $remote_storage_dir }} + chown -R {{ $remote_app_user }} {{ $remote_new_release_dir }} @endtask \ No newline at end of file