الفرق بين المراجعتين ل"Laravel/envoy"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'=== مقدمة === يوفّر Laravel Envoy صياغة نظيفة ومختزلة لتعريف المهام الشائعة وتشغيلها على الخوادم البع...')
 
سطر 1: سطر 1:
=== مقدمة ===
+
== مقدمة ==
 
يوفّر Laravel Envoy صياغة نظيفة ومختزلة لتعريف المهام الشائعة وتشغيلها على الخوادم البعيدة (remote servers)، ويمكنك إعداد المهام بسهولة باستخدام صياغة نمط Blade للنشر، أوامر Artisan وغيرها. ويدعم Envoy في الوقت الحالي أنظمة تشغيل لينكس و Mac فقط.
 
يوفّر Laravel Envoy صياغة نظيفة ومختزلة لتعريف المهام الشائعة وتشغيلها على الخوادم البعيدة (remote servers)، ويمكنك إعداد المهام بسهولة باستخدام صياغة نمط Blade للنشر، أوامر Artisan وغيرها. ويدعم Envoy في الوقت الحالي أنظمة تشغيل لينكس و Mac فقط.
  
=== التثبيت ===
+
== التثبيت ==
 
ثبّت أولًا Envoy باستخدام أمر global require الخاص بالأمر Composer:
 
ثبّت أولًا Envoy باستخدام أمر global require الخاص بالأمر Composer:
 
+
composer global require laravel/envoy
<code>composer global require laravel/envoy</code>
 
 
 
 
قد تتسبب مكتبات Composer العامة (global) في بعض الأحيان في حدوث تعارضات في الحزم، يمكنك في هذه الحالة استخدام مكتبة cgr والذي يعد بديلًا للأمر composer global require ويمكنك العثور على تعليمات تثبيت مكتبة cgr في GitHub.
 
قد تتسبب مكتبات Composer العامة (global) في بعض الأحيان في حدوث تعارضات في الحزم، يمكنك في هذه الحالة استخدام مكتبة cgr والذي يعد بديلًا للأمر composer global require ويمكنك العثور على تعليمات تثبيت مكتبة cgr في GitHub.
  
سطر 13: سطر 11:
 
=== تحديث Envoy ===
 
=== تحديث Envoy ===
 
يمكنك أيضًا استخدام Composer لإبقاء آخر نسخة محدّثة من Envoy، فبتشغيل الأمر <code>composer global update</code> ستتحدث جميع حزم Composer العامة (Global):
 
يمكنك أيضًا استخدام Composer لإبقاء آخر نسخة محدّثة من Envoy، فبتشغيل الأمر <code>composer global update</code> ستتحدث جميع حزم Composer العامة (Global):
 +
composer global update
  
<code>composer global update</code>
+
== كتابة المهام ==
 
 
=== كتابة المهام ===
 
 
يجب تعريف جميع مهام Envoy في ملف <code>Envoy.blade.php</code> في جذر مشروعك، وهذا مثال على ذلك للبدء:
 
يجب تعريف جميع مهام Envoy في ملف <code>Envoy.blade.php</code> في جذر مشروعك، وهذا مثال على ذلك للبدء:
 +
@servers(['web' => ['user@192.168.1.1']])
  
<code>@servers(['web' => ['user@192.168.1.1']])</code>
+
@task('foo', ['on' => 'web'])
  
<code>@task('foo', ['on' => 'web'])</code>
+
   ls -la
 
 
<code>   ls -la</code>
 
 
 
<code>@endtask</code>
 
  
 +
@endtask
 
فكما ترى، مصفوفة من <code>‎@servers</code> معرّفة في أعلى الملف للسماح لك بالإشارة إلى هذه الخوادم في خيار on من تعريف المهام، ويجب عليك وضع شيفرة Bash في داخل تعريفات <code>‎@task</code> التي يجب أن تعمل على خادمك عند تنفيذ المهمة.
 
فكما ترى، مصفوفة من <code>‎@servers</code> معرّفة في أعلى الملف للسماح لك بالإشارة إلى هذه الخوادم في خيار on من تعريف المهام، ويجب عليك وضع شيفرة Bash في داخل تعريفات <code>‎@task</code> التي يجب أن تعمل على خادمك عند تنفيذ المهمة.
  
 
يمكنك إجبار السكربت على العمل محليًا عن طريق تحديد 127.0.0.1 كعنوان IP للخادم:
 
يمكنك إجبار السكربت على العمل محليًا عن طريق تحديد 127.0.0.1 كعنوان IP للخادم:
 +
@servers(['localhost' => '127.0.0.1'])
  
<code>@servers(['localhost' => '127.0.0.1'])</code>
+
=== الإعداد ===
 
 
==== الإعداد ====
 
 
قد تحتاج في بعض الأحيان إلى تنفيذ بعض شيفرات PHP قبل تنفيذ مهام Envoy، يمكنك استخدام موجه <code>‎@setup</code> للإعلان عن المتغيرات وعمل أعمال PHP العامة قبل تنفيذ أي من مهامك الأخرى:
 
قد تحتاج في بعض الأحيان إلى تنفيذ بعض شيفرات PHP قبل تنفيذ مهام Envoy، يمكنك استخدام موجه <code>‎@setup</code> للإعلان عن المتغيرات وعمل أعمال PHP العامة قبل تنفيذ أي من مهامك الأخرى:
 +
@setup
  
<code>@setup</code>
+
   $now = new DateTime();
 
 
<code>   $now = new DateTime();</code>
 
 
 
<code>   $environment = isset($env) ? $env : "testing";</code>
 
  
<code>@endsetup</code>
+
   $environment = isset($env) ? $env : "testing";
  
 +
@endsetup
 
إذا أردت استدعاء ملفات PHP أخرى قبل تنفيذ المهمة، يمكنك استخدام موجه <code>‎@include</code> في أعلى ملف <code>Envoy.blade.php</code>:
 
إذا أردت استدعاء ملفات PHP أخرى قبل تنفيذ المهمة، يمكنك استخدام موجه <code>‎@include</code> في أعلى ملف <code>Envoy.blade.php</code>:
 +
@include('vendor/autoload.php')
  
<code>@include('vendor/autoload.php')</code>
+
@task('foo')
 
 
<code>@task('foo')</code>
 
  
<code>  # ...</code>
+
  # ...
  
<code>@endtask</code>
+
@endtask
  
 
==== المتغيرات ====
 
==== المتغيرات ====
 
يمكنك تمرير قيم الخيار إلى مهام Envoy إذا لزم الأمر باستخدام سطر الأوامر:
 
يمكنك تمرير قيم الخيار إلى مهام Envoy إذا لزم الأمر باستخدام سطر الأوامر:
 
+
envoy run deploy --branch=master
<code>envoy run deploy --branch=master</code>
 
 
 
 
يمكنك الوصول إلى مهامك عن طريق صياغة <code>"echo"</code> الخاصة بـ Blade، ويمكنك بالطبع استخدام if وحلقات التكرار داخل مهامك، فعلى سبيل المثال، دعنا نتحقق من وجود متغيّر <code>‎$branch</code> قبل تنفيذ أمر <code>git pull</code>:
 
يمكنك الوصول إلى مهامك عن طريق صياغة <code>"echo"</code> الخاصة بـ Blade، ويمكنك بالطبع استخدام if وحلقات التكرار داخل مهامك، فعلى سبيل المثال، دعنا نتحقق من وجود متغيّر <code>‎$branch</code> قبل تنفيذ أمر <code>git pull</code>:
 +
@servers(['web' => '192.168.1.1'])
  
<code>@servers(['web' => '192.168.1.1'])</code>
+
@task('deploy', ['on' => 'web'])
  
<code>@task('deploy', ['on' => 'web'])</code>
+
   cd site
  
<code>   cd site</code>
+
   @if ($branch)
  
<code>   @if ($branch)</code>
+
       git pull origin {{$branch }}
  
<code>       git pull origin {{$branch }}</code>
+
   @endif
  
<code>   @endif</code>
+
   php artisan migrate
  
<code>   php artisan migrate</code>
+
@endtask
 
 
<code>@endtask</code>
 
  
==== القصص Stories ====
+
=== القصص Stories ===
 
القصص هي مجموعة من المهام تحت اسم واحد مناسب، مما يسمح لك بتجميع المهام الصغيرة والمركّزة في مهام كبيرة. على سبيل المثال، يمكن لقصة deploy أن تشغل مهام git و composer من خلال سرد أسماء المهام داخل تعريفها:
 
القصص هي مجموعة من المهام تحت اسم واحد مناسب، مما يسمح لك بتجميع المهام الصغيرة والمركّزة في مهام كبيرة. على سبيل المثال، يمكن لقصة deploy أن تشغل مهام git و composer من خلال سرد أسماء المهام داخل تعريفها:
 +
@servers(['web' => '192.168.1.1'])
  
<code>@servers(['web' => '192.168.1.1'])</code>
+
@story('deploy')
 
 
<code>@story('deploy')</code>
 
  
<code>   git</code>
+
   git
  
<code>   composer</code>
+
   composer
  
<code>@endstory</code>
+
@endstory
  
<code>@task('git')</code>
+
@task('git')
  
<code>   git pull origin master</code>
+
   git pull origin master
  
<code>@endtask</code>
+
@endtask
  
<code>@task('composer')</code>
+
@task('composer')
  
<code>   composer install</code>
+
   composer install
 
 
<code>@endtask</code>
 
  
 +
@endtask
 
وبمجرد كتابة القصة، يمكنك تشغيلها مثل المهمة النموذجيّة:
 
وبمجرد كتابة القصة، يمكنك تشغيلها مثل المهمة النموذجيّة:
 +
envoy run deploy
  
<code>envoy run deploy</code>
+
=== خوادم متعددة ===
 
 
==== خوادم متعددة ====
 
 
يسمح لك Envoy بتشغيل مهمة عبر العديد من الخوادم بسهولة، أضف أولًا الخوادم الإضافيّة إلى إعلان <code>‎@servers</code> الخاص بك، ويجب عليك تعيين اسم فريد لكل خادم، وبمجرد تحديد خوادمك الإضافيّة، ضع كل خوادمك في مصفوفة المهمة (task) on:
 
يسمح لك Envoy بتشغيل مهمة عبر العديد من الخوادم بسهولة، أضف أولًا الخوادم الإضافيّة إلى إعلان <code>‎@servers</code> الخاص بك، ويجب عليك تعيين اسم فريد لكل خادم، وبمجرد تحديد خوادمك الإضافيّة، ضع كل خوادمك في مصفوفة المهمة (task) on:
  
سطر 121: سطر 106:
 
<code>@endtask</code>
 
<code>@endtask</code>
  
==== التنفيذ التفرّعي ====
+
=== التنفيذ التفرّعي ===
 
بشكل افتراضي، ستُنفذ المهام على كل خادم بشكل تسلسلي، وبمعنى آخر، سينتهي تنفيذ المهمة على الخادم الأول قبل المتابعة في الخادم الثاني، وإذا كنت ترغب في تشغيل مَهمَة عن طريق عدة خوادم بالتوازي، فأضف خيار parallel لتصريح أفضل:
 
بشكل افتراضي، ستُنفذ المهام على كل خادم بشكل تسلسلي، وبمعنى آخر، سينتهي تنفيذ المهمة على الخادم الأول قبل المتابعة في الخادم الثاني، وإذا كنت ترغب في تشغيل مَهمَة عن طريق عدة خوادم بالتوازي، فأضف خيار parallel لتصريح أفضل:
 +
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
  
<code>@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])</code>
+
@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])
  
<code>@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])</code>
+
   cd site
  
<code>   cd site</code>
+
   git pull origin {{$branch }}
 
 
<code>   git pull origin {{$branch }}</code>
 
  
<code>   php artisan migrate</code>
+
   php artisan migrate
  
<code>@endtask</code>
+
@endtask
  
==== تشغيل المهام ====
+
=== تشغيل المهام ===
 
لتشغيل مهمة أو قصة معرّفة في ملف <code>Envoy.blade.php</code>، نفّذ أمر run الخاص بـ Envoy، ومرّر اسم المهمة أو القصة التي ترغب في تنفيذها، وسيُشغّل Envoy المهمة وسيعرض المخرجات من الخوادم أثناء تشغيل المهمة:
 
لتشغيل مهمة أو قصة معرّفة في ملف <code>Envoy.blade.php</code>، نفّذ أمر run الخاص بـ Envoy، ومرّر اسم المهمة أو القصة التي ترغب في تنفيذها، وسيُشغّل Envoy المهمة وسيعرض المخرجات من الخوادم أثناء تشغيل المهمة:
 
+
envoy run task
<code>envoy run task</code>
 
  
 
==== تأكيد تنفيذ المهمة ====
 
==== تأكيد تنفيذ المهمة ====
 
إذا كنت ترغب في أن تحصل على تأكيد قبل تشغيل مهمة معينة على خوادمك الخاصة، فيجب عليك إضافة توجيه confirm إلى إعلان المهمة، وهذا الخيار مفيد للعمليات المدمرة:
 
إذا كنت ترغب في أن تحصل على تأكيد قبل تشغيل مهمة معينة على خوادمك الخاصة، فيجب عليك إضافة توجيه confirm إلى إعلان المهمة، وهذا الخيار مفيد للعمليات المدمرة:
 +
@task('deploy', ['on' => 'web', 'confirm' => true])
  
<code>@task('deploy', ['on' => 'web', 'confirm' => true])</code>
+
   cd site
  
<code>   cd site</code>
+
   git pull origin {{$branch }}
  
<code>   git pull origin {{$branch }}</code>
+
   php artisan migrate
  
<code>   php artisan migrate</code>
+
@endtask
  
<code>@endtask</code>
+
== الإشعارات ==
 
 
=== الإشعارات ===
 
  
==== Slack ====
+
=== Slack ===
 
يدعم Envoy إرسال الإشعارات إلى Slack بعد تنفيذ كل مهمة، يقبل موجه <code>‎@slack</code> عنوان خطّاف URL واسم القناة، ويمكنك الحصول على عنوان خطّاف ‎(webhook) URL عن طريق إنشاء تكامل "Incoming WebHooks" في لوحة تحكم Slack، ويجب عليك تمرير كامل عنوان webhook URL إلى موجه <code>‎@slack</code>:
 
يدعم Envoy إرسال الإشعارات إلى Slack بعد تنفيذ كل مهمة، يقبل موجه <code>‎@slack</code> عنوان خطّاف URL واسم القناة، ويمكنك الحصول على عنوان خطّاف ‎(webhook) URL عن طريق إنشاء تكامل "Incoming WebHooks" في لوحة تحكم Slack، ويجب عليك تمرير كامل عنوان webhook URL إلى موجه <code>‎@slack</code>:
 +
@finished
  
<code>@finished</code>
+
   @slack('webhook-url', '#bots')
 
 
<code>   @slack('webhook-url', '#bots')</code>
 
 
 
<code>@endfinished</code>
 
  
 +
@endfinished
 
يمكنك توفير أي مما يلي كمعامل القناة:
 
يمكنك توفير أي مما يلي كمعامل القناة:
 
* لإرسال التنبيهات إلى قناة: <code>‎#channel</code>.
 
* لإرسال التنبيهات إلى قناة: <code>‎#channel</code>.
  
 
* لإرسال التنبيهات إلى مستخدم: <code>‎@user</code>.
 
* لإرسال التنبيهات إلى مستخدم: <code>‎@user</code>.
مصادر:
 
  
[https://laravel.com/docs/5.6/envoy صفحة مشغّل المهام Envoy في توثيق Laravel الرسمي.]
+
== مصادر ==
 +
* [https://laravel.com/docs/5.6/envoy صفحة مشغّل المهام Envoy في توثيق Laravel الرسمي.]

مراجعة 14:24، 18 أكتوبر 2018

مقدمة

يوفّر Laravel Envoy صياغة نظيفة ومختزلة لتعريف المهام الشائعة وتشغيلها على الخوادم البعيدة (remote servers)، ويمكنك إعداد المهام بسهولة باستخدام صياغة نمط Blade للنشر، أوامر Artisan وغيرها. ويدعم Envoy في الوقت الحالي أنظمة تشغيل لينكس و Mac فقط.

التثبيت

ثبّت أولًا Envoy باستخدام أمر global require الخاص بالأمر Composer:

composer global require laravel/envoy

قد تتسبب مكتبات Composer العامة (global) في بعض الأحيان في حدوث تعارضات في الحزم، يمكنك في هذه الحالة استخدام مكتبة cgr والذي يعد بديلًا للأمر composer global require ويمكنك العثور على تعليمات تثبيت مكتبة cgr في GitHub.

تنبيه: تأكد من وضع مسار مجلد ‎~/.composer/vendor/bin في متغير البيئة PATH الخاص بك حتى يُعثر على Envoy عند تشغيل أمر envoy في طرفيتك.

تحديث Envoy

يمكنك أيضًا استخدام Composer لإبقاء آخر نسخة محدّثة من Envoy، فبتشغيل الأمر composer global update ستتحدث جميع حزم Composer العامة (Global):

composer global update

كتابة المهام

يجب تعريف جميع مهام Envoy في ملف Envoy.blade.php في جذر مشروعك، وهذا مثال على ذلك للبدء:

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

فكما ترى، مصفوفة من ‎@servers معرّفة في أعلى الملف للسماح لك بالإشارة إلى هذه الخوادم في خيار on من تعريف المهام، ويجب عليك وضع شيفرة Bash في داخل تعريفات ‎@task التي يجب أن تعمل على خادمك عند تنفيذ المهمة.

يمكنك إجبار السكربت على العمل محليًا عن طريق تحديد 127.0.0.1 كعنوان IP للخادم:

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

الإعداد

قد تحتاج في بعض الأحيان إلى تنفيذ بعض شيفرات PHP قبل تنفيذ مهام Envoy، يمكنك استخدام موجه ‎@setup للإعلان عن المتغيرات وعمل أعمال PHP العامة قبل تنفيذ أي من مهامك الأخرى:

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

إذا أردت استدعاء ملفات PHP أخرى قبل تنفيذ المهمة، يمكنك استخدام موجه ‎@include في أعلى ملف Envoy.blade.php:

@include('vendor/autoload.php')
@task('foo')
  # ...
@endtask

المتغيرات

يمكنك تمرير قيم الخيار إلى مهام Envoy إذا لزم الأمر باستخدام سطر الأوامر:

envoy run deploy --branch=master

يمكنك الوصول إلى مهامك عن طريق صياغة "echo" الخاصة بـ Blade، ويمكنك بالطبع استخدام if وحلقات التكرار داخل مهامك، فعلى سبيل المثال، دعنا نتحقق من وجود متغيّر ‎$branch قبل تنفيذ أمر git pull:

@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
   cd site
   @if ($branch)
       git pull origin قالب:$branch
   @endif
   php artisan migrate
@endtask

القصص Stories

القصص هي مجموعة من المهام تحت اسم واحد مناسب، مما يسمح لك بتجميع المهام الصغيرة والمركّزة في مهام كبيرة. على سبيل المثال، يمكن لقصة deploy أن تشغل مهام git و composer من خلال سرد أسماء المهام داخل تعريفها:

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

وبمجرد كتابة القصة، يمكنك تشغيلها مثل المهمة النموذجيّة:

envoy run deploy

خوادم متعددة

يسمح لك Envoy بتشغيل مهمة عبر العديد من الخوادم بسهولة، أضف أولًا الخوادم الإضافيّة إلى إعلان ‎@servers الخاص بك، ويجب عليك تعيين اسم فريد لكل خادم، وبمجرد تحديد خوادمك الإضافيّة، ضع كل خوادمك في مصفوفة المهمة (task) on:

@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

التنفيذ التفرّعي

بشكل افتراضي، ستُنفذ المهام على كل خادم بشكل تسلسلي، وبمعنى آخر، سينتهي تنفيذ المهمة على الخادم الأول قبل المتابعة في الخادم الثاني، وإذا كنت ترغب في تشغيل مَهمَة عن طريق عدة خوادم بالتوازي، فأضف خيار parallel لتصريح أفضل:

@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

تشغيل المهام

لتشغيل مهمة أو قصة معرّفة في ملف Envoy.blade.php، نفّذ أمر run الخاص بـ Envoy، ومرّر اسم المهمة أو القصة التي ترغب في تنفيذها، وسيُشغّل Envoy المهمة وسيعرض المخرجات من الخوادم أثناء تشغيل المهمة:

envoy run task

تأكيد تنفيذ المهمة

إذا كنت ترغب في أن تحصل على تأكيد قبل تشغيل مهمة معينة على خوادمك الخاصة، فيجب عليك إضافة توجيه confirm إلى إعلان المهمة، وهذا الخيار مفيد للعمليات المدمرة:

@task('deploy', ['on' => 'web', 'confirm' => true])
   cd site
   git pull origin قالب:$branch
   php artisan migrate
@endtask

الإشعارات

Slack

يدعم Envoy إرسال الإشعارات إلى Slack بعد تنفيذ كل مهمة، يقبل موجه ‎@slack عنوان خطّاف URL واسم القناة، ويمكنك الحصول على عنوان خطّاف ‎(webhook) URL عن طريق إنشاء تكامل "Incoming WebHooks" في لوحة تحكم Slack، ويجب عليك تمرير كامل عنوان webhook URL إلى موجه ‎@slack:

@finished
   @slack('webhook-url', '#bots')
@endfinished

يمكنك توفير أي مما يلي كمعامل القناة:

  • لإرسال التنبيهات إلى قناة: ‎#channel.
  • لإرسال التنبيهات إلى مستخدم: ‎@user.

مصادر