کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش task ها در Laravel

Envoy –سرویس اجرا کننده ی عملیات / task ها در Laravel

  1. مقدمه
  2. تعریف task ها
    • تعریف متغیرهایی برای تنظیم سفارشی task
    • راه اندازی یک task در چندین server
    • اجرای task ها به وسیله ی macro ها
  3. راه اندازی و اجرای task ها
  4. notification ها –ارسال پیغام های اطلاع رسانی به سرویس های آنلاین
    • ارسال پیغام به HipChat
    • ارسال پیغام به Slack

مقدمه

سرویس Envoy لاراول با ارائه ی ساختار دستوری (syntax) بهینه با کدنویسی مختصر این امکان را می دهد تا task ها و عملیات رایج را به آسانی در سرویس دهندگان راه دور (remote server) اجرا نمایید. با بهره گیری از ساختار نگارشی (syntax) و سبک کدنویسی موتور Blade به راحتی قادر خواهید بود task ها را برای نصب تنظیم نمایید. در حال حاضر Envoy تنها از دو سیستم عامل Mac و Linux پشتیبانی می کند.

نصب

در گام نخست بایستی Envoy را با استفاده از دستور global نرم افزار Composer نصب نمایید:

                    composer global require "laravel/envoy=~1.0"

لازم است پوشه ی ~/.composer/vendor/bin را در متغیر PATH قرار دهید تا زمانی که دستور envoy را در پنجره ی فرمان (terminal) فراخوانی کردید، فایل اجرایی envoy در دسترس باشد.

بروز آوری Envoy

از طریق Composer همچنین می توانید نسخه ی Envoy نصب شده بر روی سیستم خود را بروز رسانی نمایید:
composer global update

تعریف Task ها

تمامی task های Envoy می بایست داخل فایل Envoy.blade.php در root پروژه تعریف شوند. در زیر نمونه ای جهت آشنایی شما ارائه شده است:

@servers(['web' => 'user@192.168.1.1'])
@task('foo', ['on' => 'web'])
   ls -la
@endtask

همان طور که می بینید در بالای فایل آرایه ای به نام @servers تعریف شده که به شما اجازه می دهد به server های جاری (مشخص شده در آرایه ی@servers)، در آپشن on داخل تعریف task ارجاع دهید. کد Bash را بایستی داخل تعریف @task قرار دهید تا زمانی که task مدنظر بر رویserver اجرا شد، این کد نیز اجرا شود.

Task های محلی

می توانید یک اسکریپت بنویسید تا task به صورت محلی بر روی سرور اجرا شود. برای این منظور کافی است localhost را در آرایه ی @serversبا آدرس IP '127.0.0.1' مقدار دهی کنید:

                    @servers(['localhost' => '127.0.0.1'])

خود راه اندازی و تنظیم اولیه (Bootstrapping)

گاهی لازم می شود پیش از ارزیابی task های Envoy، کدهای PHP را اجرا نمایید. برای این منظور می توانید دستور @setup را بکار ببرید. اینdirective متغیرهای اولیه را اعلان و کارهای معمول PHP را داخل فایل Envoy انجام می دهد:

@setup
   $now = new DateTime();
   $environment = isset($env) ? $env : "testing";
@endsetup

برای اضافه یا وارد کردن فایل های PHP از خارج می توانید دستور @includeرا بکار ببرید:

                    @include('vendor/autoload.php')

دریافت اجازه برای اجرای task (confirm کردن تسک برای اجرا بر روی سرور)

اگر می خواهید task برای اجرای بر روی server نیاز به تائیدیه و مجوز شما داشته باشد، در آن صورت می بایست دستور confirm را به تعریفtask مربوطه اضافه نمایید:

@task('deploy', ['on' => 'web', 'confirm' => true])
   cd site
   git pull origin {{ $branch }}
   php artisan migrate
@endtask

تعریف متغیرهایی برای تنظیم سفارشی task

در صورت لزوم می توانید متغیرهایی را از طریق گزینه های خط فرمان (command line switch) به داخل فایل Envoy ارسال کرده و بدین وسیلهtask ها را مطابق نیاز خود تنظیم نمایید:

                    envoy run deploy --branch=master

می توان آپشن های مورد نظر را به وسیله ی معادل دستور echo در (دستور نحوی) Blade " {{}} " داخل task های خود بکار برد:

@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
   cd site
   git pull origin {{ $branch }}
   php artisan migrate
@endtask

راه اندازی یک task در چندین server

به راحتی می توان یک task را بر روی چندین server اجرا کرد. ابتدا بایستی تمامی server های مورد نظر را به تعریف آرایه ی @servers اضافه نمایید. لازم است به هر server یک نام منحصربفرد اختصاص داده شود. پس از مشخص کردن server های دلخواه در آرایه، باید اسم آن ها را در آپشن on داخل تعریف task لیست کنید:

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
@task('deploy', ['on' => ['web-1', 'web-2']])
   cd site
   git pull origin {{ $branch }}
   php artisan migrate
@endtask

به صورت پیش فرض task ها به صورت ترتیبی بر روی هر server اجرا می شوند، بدین معنی که ابتدا task در سرور اول اجرا می شود و پس از آن در server دوم و به همین ترتیب ادامه می یابد.

اجرای همزمان و موازی task ها

اگر می خواهید یک task به صورت موازی و همزمان بر روی چندین سرور اجرا شود، کافی است گزینه ی parallel را به تعریف task خود اضافه نمایید:

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])
   cd site
   git pull origin {{ $branch }}
   php artisan migrate
@endtask

اجرای task ها به وسیله ی macro ها

macro ها به شما این امکان را می دهند تا یک سری task تعریف کنید و سپس آن ها را طی یک دستور واحد به ترتیب اجرا نمایید. در مثال زیر ماکروdeploy تسک های git و composer را به ترتیب اجرا می کند:

@servers(['web' => '192.168.1.1'])
@macro('deploy')
   git
   composer
@endmacro
@task('git')
   git pull origin master
@endtask
@task('composer')
   composer install
@endtask

پسی از تعریف macro، می توانید آن را با یک دستور ساده و کوتاه اجرا کنید:

                    envoy run deploy

اجرای task ها

برای اجرای یک task از فایل Envoy.blade.php، دستور run را اجرا نموده و اسم task یا macro ی دلخواه (برای اجرا) را به دستور مزبور ارسال نمایید. Envoy خود task مربوطه را اجرا کرده و خروجی آن را همین که task در حال اجرا است، از server ها گرفته و به نمایش می گذارد:

                    envoy run task

notification ها –ارسال پیغام های اطلاع رسانی به سرویس های آنلاین

ارسال پیغام به HipChat

پس از اجرای یک task، می توانید با فراخوانی دستور @hipchat به تمامی اعضای چت روم HipChat یک پیغام ارسال نمایید. این دستور یک API token، اسم چت روم و نام کاربری که باید به عنوان فرستنده ی پیغام نمایش داده شود را به عنوان پارامتر دریافت می کند:

@servers(['web' => '192.168.1.1'])
@task('foo', ['on' => 'web'])
   ls -la
@endtask
@after
   @hipchat('token', 'room', 'Envoy')
@endafter

در صورت تمایل می توانید یک پیغام سفارشی به عنوان آرگومان برای ارسال به چت روم HipChat به این دستور پاس دهید. تمامی متغیرهایی که در اختیار task های Envoy قرار دارند، به هنگام ایجاد پیغام سفارشی نیز در دسترس می باشند:

@after
   @hipchat('token', 'room', 'Envoy', "$task ran in the $env environment.")
@endafter

ارسال پیغام به سرویس آنلاین Slack

Envoy از قابلیت ارسال پیغام به Slack نیز پشتیبانی می کند. برای این منظور دستور @slack را صدا می زنیم. این دستور یک hook URL(URL اتصال)، اسم کانال و پیغام مورد نظر برای ارسال به سرویس آنلاین را به عنوان پارامتر ورودی دریافت می کند (web hook: یک رخداد اطلاع رسانی است که به آدرس URL تعیین شده فرستاده می شود. کاربران می توانند آن را برای رویدادهایی که رخ می دهند در سایت برای اطلاع رسانی در سایت های دیگر تنظیم نمایند):

@after
   @slack('hook', 'channel', 'message')
@endafter

URL اتصال (Webhook) با ایجاد یک اینتگریشن Incoming WebHooks در وب سایت Slack در اختیار شما قرار می گیرد. اولین آرگومان باید کل webhook URL ارائه شده توسط اینتگریشن Incoming WebHooks باشد (با ایجاد اینتگریشن سرویس های شخص ثالث را با API های خارجی دیگر ادغام می کنیم). مثال:

                    https://hooks.slack.com/services/ZZZZZZZZZ/YYYYYYYYY/XXXXXXXXXXXXXXX

می توانید یکی از دو پارامتر زیر را به عنوان آرگومان دوم (channel) به دستور پاس دهید:

  1. برای ارسال پیغام به کانال: پارامتر #channel
  2. برای ارسال پیغام به کاربر: پارامتر @user
1395/04/05 3070 1249
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...