فرستاده لاراول
معرفی
Laravel Envoy ابزاری برای اجرای وظایف رایجی است که روی سرورهای راه دور خود اجرا می کنید. با استفاده از نحو Blade style، میتوانید به راحتی وظایف مربوط به استقرار، دستورات Artisan و موارد دیگر را تنظیم کنید. در حال حاضر Envoy تنها از سیستم عامل های مک و لینوکس پشتیبانی می کند. با این حال، پشتیبانی از ویندوز با استفاده از WSL2 قابل دستیابی است .
نصب و راه اندازی
ابتدا Envoy را با استفاده از مدیریت بسته Composer در پروژه خود نصب کنید:
composer require laravel/envoy --dev
پس از نصب Envoy، باینری Envoy در
vendor/bin
فهرست برنامه شما در دسترس خواهد بود:
php vendor/bin/envoy
وظایف نوشتن
تعریف وظایف
Tasks بلوک اصلی سازنده Envoy هستند. Tasks دستورات پوسته ای را تعریف می کند که باید در سرورهای راه دور شما هنگام فراخوانی کار اجرا شوند. به عنوان مثال، ممکن است وظیفه ای را تعریف کنید که این
php artisan queue:restart
دستور را در تمام سرورهای queue worker برنامه شما اجرا کند.
تمام وظایف Envoy شما باید در
Envoy.blade.php
فایلی در ریشه برنامه شما تعریف شود. در اینجا یک مثال برای شروع شما آورده شده است:
@servers(['web' => ['user@192.168.1.1'], 'workers' => ['user@192.168.1.2']]) @task('restart-queues', ['on' => 'workers']) cd /home/user/example.com php artisan queue:restart@endtask
همانطور که می بینید، آرایه ای از
@servers
در بالای فایل تعریف شده است که به شما امکان می دهد از طریق
on
گزینه اعلان وظایف خود به این سرورها ارجاع دهید. اظهارنامه
@servers
باید همیشه در یک خط قرار گیرد. در اعلانهای خود
@task
، باید دستورات پوستهای را که باید هنگام فراخوانی وظیفه بر روی سرورهای خود اجرا شوند، قرار دهید.
وظایف محلی
می توانید با تعیین آدرس IP سرور به صورت زیر، یک اسکریپت را مجبور به اجرا در رایانه محلی خود کنید
127.0.0.1
:
@servers(['localhost' => '127.0.0.1'])
واردات وظایف فرستاده
با استفاده از
@import
دستورالعمل، میتوانید فایلهای Envoy دیگر را وارد کنید تا داستانها و وظایف آنها به شما اضافه شود. پس از وارد شدن فایلها، میتوانید وظایفی را که در آنها وجود دارد، طوری اجرا کنید که گویی در فایل Envoy خودتان تعریف شدهاند:
@import('vendor/package/Envoy.blade.php')
چندین سرور
Envoy به شما اجازه می دهد تا به راحتی یک کار را در چندین سرور اجرا کنید. ابتدا سرورهای اضافی را به
@servers
اعلان خود اضافه کنید. به هر سرور باید یک نام منحصر به فرد اختصاص داده شود. هنگامی که سرورهای اضافی خود را تعریف کردید، می توانید هر یک از سرورهای موجود در
on
آرایه کار را فهرست کنید:
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd /home/user/example.com git pull origin {{ $branch }} php artisan migrate --force@endtask
اجرای موازی
به طور پیش فرض، وظایف بر روی هر سرور به صورت سریال اجرا می شود. به عبارت دیگر، اجرای یک کار در سرور اول قبل از ادامه اجرا در سرور دوم به پایان می رسد. اگر می خواهید یک کار را در چندین سرور به صورت موازی اجرا کنید، این
parallel
گزینه را به اعلان وظیفه خود اضافه کنید:
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true]) cd /home/user/example.com git pull origin {{ $branch }} php artisan migrate --force@endtask
برپایی
گاهی اوقات، ممکن است لازم باشد قبل از اجرای وظایف Envoy خود کد PHP دلخواه را اجرا کنید. می توانید از
@setup
دستورالعمل برای تعریف یک بلوک از کد PHP استفاده کنید که باید قبل از انجام وظایف شما اجرا شود:
@setup $now = new DateTime;@endsetup
اگر قبل از اجرای وظیفه خود نیاز به فایل های PHP دیگری دارید، می توانید از
@include
دستورالعمل موجود در بالای
Envoy.blade.php
فایل خود استفاده کنید:
@include('vendor/autoload.php') @task('restart-queues') # ...@endtask
متغیرها
در صورت نیاز، میتوانید آرگومانهایی را با مشخص کردن آنها در خط فرمان هنگام فراخوانی Envoy به وظایف Envoy ارسال کنید:
php vendor/bin/envoy run deploy --branch=master
شما می توانید با استفاده از نحو "echo" Blade به گزینه های درون وظایف خود دسترسی داشته باشید. همچنین می توانید
if
عبارات و حلقه های Blade را در وظایف خود تعریف کنید. به عنوان مثال، اجازه دهید
$branch
قبل از اجرای دستور
، وجود متغیر را بررسی کنیم
git pull
:
@servers(['web' => ['user@192.168.1.1']]) @task('deploy', ['on' => 'web']) cd /home/user/example.com @if ($branch) git pull origin {{ $branch }} @endif php artisan migrate --force@endtask
داستان ها
داستان ها مجموعه ای از وظایف را تحت یک نام واحد و راحت گروه بندی می کنند. به عنوان مثال، یک
deploy
داستان ممکن است وظایف
update-code
و
install-dependencies
را با فهرست کردن نام وظایف در تعریف خود اجرا کند:
@servers(['web' => ['user@192.168.1.1']]) @story('deploy') update-code install-dependencies@endstory @task('update-code') cd /home/user/example.com git pull origin master@endtask @task('install-dependencies') cd /home/user/example.com composer install@endtask
هنگامی که داستان نوشته شد، می توانید آن را به همان روشی که یک کار را فراخوانی می کنید، فراخوانی کنید:
php vendor/bin/envoy run deploy
قلاب
هنگامی که وظایف و داستان ها اجرا می شوند، تعدادی هوک اجرا می شوند. انواع قلاب های پشتیبانی شده توسط Envoy عبارتند از
@before
,
@after
,
@error
,
@success
, و
@finished
. تمام کدهای موجود در این هوک ها به صورت PHP تفسیر می شوند و به صورت محلی اجرا می شوند، نه روی سرورهای راه دور که وظایف شما با آنها تعامل دارند.
می توانید به تعداد دلخواه از هر یک از این قلاب ها تعریف کنید. آنها به ترتیبی که در اسکریپت Envoy شما ظاهر می شوند اجرا می شوند.
@before
قبل از اجرای هر کار، تمام
@before
هوک های ثبت شده در اسکریپت Envoy شما اجرا می شوند. قلاب
@before
ها نام وظیفه ای را دریافت می کنند که اجرا می شود:
@before if ($task === 'deploy') { // ... }@endbefore
@after
پس از اجرای هر کار، تمام
@after
هوک های ثبت شده در اسکریپت Envoy شما اجرا می شوند. قلاب
@after
ها نام وظیفه ای را که اجرا شده است دریافت می کنند:
@after if ($task === 'deploy') { // ... }@endafter
@error
پس از هر شکست کاری (خروج با کد وضعیت بزرگتر از
0
)، همه
@error
هوک های ثبت شده در اسکریپت Envoy شما اجرا می شوند. قلاب
@error
ها نام وظیفه ای را که اجرا شده است دریافت می کنند:
@error if ($task === 'deploy') { // ... }@enderror
@success
اگر همه کارها بدون خطا اجرا شده باشند، همه
@success
هوک های ثبت شده در اسکریپت Envoy شما اجرا می شوند:
@success // ...@endsuccess
@finished
پس از انجام تمام وظایف (صرف نظر از وضعیت خروج)، همه
@finished
هوک ها اجرا می شوند. قلاب
@finished
ها کد وضعیت کار تکمیل شده را دریافت می کنند که ممکن است
null
بزرگتر
integer
یا مساوی با
0
:
@finished if ($exitCode > 0) { // There were errors in one of the tasks... }@endfinished
در حال اجرا وظایف
برای اجرای یک کار یا داستانی که در فایل برنامه شما تعریف شده است
Envoy.blade.php
، دستور Envoy را اجرا کنید
run
و نام وظیفه یا داستانی را که می خواهید اجرا کنید، ارسال کنید. Envoy وظیفه را اجرا می کند و خروجی را از سرورهای راه دور شما در حین اجرای کار نمایش می دهد:
php vendor/bin/envoy run deploy
تایید اجرای کار
اگر میخواهید قبل از اجرای یک وظیفه معین در سرورهای خود از شما خواسته شود تا تأیید شود، باید دستورالعمل را
confirm
به اعلان وظیفه خود اضافه کنید. این گزینه به ویژه برای عملیات مخرب مفید است:
@task('deploy', ['on' => 'web', 'confirm' => true]) cd /home/user/example.com git pull origin {{ $branch }} php artisan migrate@endtask
اطلاعیه
سستی
Envoy از ارسال اعلانها به
Slack
پس از اجرای هر وظیفه پشتیبانی میکند. این
@slack
دستورالعمل یک URL هوک Slack و یک کانال / نام کاربری را می پذیرد. میتوانید URL وب هوک خود را با ایجاد یک ادغام «WebHooks ورودی» در کنترل پنل Slack خود بازیابی کنید.
شما باید کل URL webhook را به عنوان اولین آرگومان ارائه شده به
@slack
دستورالعمل ارسال کنید. دومین آرگومان داده شده به
@slack
دستورالعمل باید نام کانال (
#channel
) یا نام کاربری (
@user
) باشد:
@finished @slack('webhook-url', '#bots')@endfinished
به طور پیشفرض، اعلانهای Envoy پیامی را به کانال اعلان ارسال میکند که وظیفهای را که اجرا شده است، توصیف میکند. با این حال، میتوانید با ارسال آرگومان سوم به دستورالعمل، این پیام را با پیام سفارشی خود بازنویسی کنید
@slack
:
@finished @slack('webhook-url', '#bots', 'Hello, Slack.')@endfinished
اختلاف
Envoy همچنین از ارسال اعلانها به
Discord
پس از اجرای هر وظیفه پشتیبانی میکند. این
@discord
دستورالعمل URL هوک Discord و یک پیام را می پذیرد. میتوانید با ایجاد یک «Webhook» در تنظیمات سرور خود و انتخاب کانالی که وبهوک باید در کدام کانال پست کند، URL وب هوک خود را بازیابی کنید. شما باید کل URL Webhook را به
@discord
دستورالعمل ارسال کنید:
@finished @discord('discord-webhook-url')@endfinished
تلگرام
Envoy همچنین از ارسال نوتیفیکیشن به
تلگرام
پس از انجام هر کار پشتیبانی می کند. این
@telegram
دستورالعمل شناسه ربات تلگرام و شناسه چت را می پذیرد. شما می توانید ID ربات خود را با ایجاد یک ربات جدید با استفاده از
BotFather
بازیابی کنید . با استفاده از
@username_to_id_bot
میتوانید یک شناسه چت معتبر را بازیابی کنید
. شما باید کل Bot ID و Chat ID را در
@telegram
دستورالعمل ارسال کنید:
@finished @telegram('bot-id','chat-id')@endfinished
تیم های مایکروسافت
Envoy همچنین از ارسال اعلانها به
تیمهای مایکروسافت
پس از انجام هر کار پشتیبانی میکند. این
@microsoftTeams
دستورالعمل یک Teams Webhook (الزامی)، یک پیام، رنگ تم (موفقیت، اطلاعات، هشدار، خطا) و مجموعهای از گزینهها را میپذیرد. شما می توانید با ایجاد یک
وب هوک
جدید، Teams Webhook خود را بازیابی کنید
. Teams API دارای بسیاری از ویژگی های دیگر برای سفارشی کردن جعبه پیام شما مانند عنوان، خلاصه و بخش ها است. می توانید اطلاعات بیشتری را در
مستندات تیم های مایکروسافت
بیابید . شما باید کل URL Webhook را به
@microsoftTeams
دستورالعمل ارسال کنید:
@finished @microsoftTeams('webhook-url')@endfinished