تخزين الاعتماديات مؤقتًا لتسريع التنفيذ
طبّقوا التخزين المؤقت لتسريع تنفيذ سير العمل بدرجة كبيرة، وذلك بإعادة استخدام الاعتماديات ومخرجات البناء المُنشأة.
تخزين الاعتماديات مؤقتًا لتسريع التنفيذ درس مجاني في CI/CD with GitHub Actions & DevOps Pipelines على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CI/CD with GitHub Actions & DevOps Pipelines، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CI/CD with GitHub Actions & DevOps Pipelines 4 دروس في المجموع.
تسريع مسارات العمل باستخدام التخزين المؤقت
هل لاحظتم أن مسار العمل يعيد تنزيل التبعيات نفسها في كل مرة؟ هذا يبطئ التنفيذ!
يتيح لكم التخزين المؤقت في GitHub Actions حفظ الملفات من عمليات التشغيل السابقة وإعادة استخدامها. ويؤدي ذلك إلى تسريع عمليات تنفيذ مسار العمل اللاحقة بشكل كبير.
التعرّف إلى إجراء التخزين المؤقت
توفر GitHub إجراءً خاصًا يُسمى actions/cache@v3. صُمم هذا الإجراء لحفظ الملفات واستعادتها، مما يجعل مسارات العمل لديكم أسرع.
وهو ذكي؛ إذ يتحقق من وجود التخزين المؤقت مسبقًا قبل محاولة استعادته، ويحفظه إذا لم يكن موجودًا.
مفتاح التخزين المؤقت ومساره
هناك مَعْلَمتان أساسيتان لإجراء actions/cache، وهما key وpath:
key: سلسلة فريدة تحدد التخزين المؤقت لديكم. وإذا عُثر على تخزين مؤقت بهذا المفتاح، فستتم استعادته.path: مسارات الملفات أو الأدلة التي تريدون تخزينها مؤقتًا. ويحدد ذلك للإجراء الملفات التي يجب حفظها أو استعادتها.
غالبًا ما يتضمن المفتاح تجزئةً لملفات التبعيات، لضمان إبطال التخزين المؤقت عند تغير التبعيات.
تخزين تبعيات Node.js مؤقتًا
لنفترض أننا نريد تخزين node_modules مؤقتًا لمشروع Node.js. سنستخدم hashFiles لإنشاء مفتاح ديناميكي استنادًا إلى package-lock.json.
جرّبوا تشغيل مقطع مسار العمل البسيط هذا:
name: Node.js CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Node.js modules
uses: actions/cache@v3
with:
path: node_modules
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testالبديل باستخدام مفاتيح الاستعادة
ماذا يحدث إذا لم يطابق key الدقيق أي تخزين مؤقت؟ هنا تأتي فائدة restore-keys!
توفر restore-keys قائمة بمفاتيح احتياطية للبحث عنها. فإذا لم يعثر المفتاح الأساسي، مثل npm-${{ hashFiles(...) }}، على تطابق، تحاول GitHub Actions العثور على تخزين مؤقت باستخدام مفاتيح restore-keys بالترتيب.
في مثالنا، يحاول npm- العثور على أي تخزين مؤقت يبدأ بـ «npm-»، وهو أمر مفيد إذا تغيرت إصدارات التبعيات بشكل طفيف فقط.
تخزين تبعيات Python مؤقتًا
لا يقتصر التخزين المؤقت على Node.js! يمكنكم تطبيق المبدأ نفسه على لغات أخرى مثل Python. وهنا نخزن بيئة Python الافتراضية وذاكرة pip المؤقتة.
يستخدم المفتاح هنا hashFiles('requirements.txt')، بينما يشير المسار إلى البيئة الافتراضية ودليل ذاكرة pip المؤقتة.
name: Python CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Cache Python dependencies
uses: actions/cache@v3
with:
path: |
~/.cache/pip
.venv
key: pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
pip-
- name: Install dependencies
run: |
python -m venv .venv
.venv/bin/pip install -r requirements.txt
- name: Run tests
run: .venv/bin/python -m unittest discoverمتى يجب إبطال التخزين المؤقت
لا يكون التخزين المؤقت مفيدًا إلا إذا كان حديثًا بما يكفي. فإذا تغيرت التبعيات لديكم، فينبغي أن يتغير التخزين المؤقت أيضًا!
يُبطل التخزين المؤقت تلقائيًا إذا تغير key الأساسي، مثل npm-${{ hashFiles('package-lock.json') }}. وعند تحديث package-lock.json، تتغير التجزئة ويُنشأ تخزين مؤقت جديد.
يمكنكم أيضًا فرض إعادة بناء التخزين المؤقت بتغيير المفتاح يدويًا، مثل إضافة لاحقة للإصدار كالتالي: npm-v2-${{ hashFiles(...) }}.
نطاق التخزين المؤقت وحدوده
من المفيد معرفة كيفية عمل التخزين المؤقت خلف الكواليس:
- النطاق: يكون التخزين المؤقت محددًا لكل مستودع ولكل فرع. ولن يُستخدم التخزين المؤقت الموجود على الفرع
mainفي فرع ميزات، إلا إذا أعددتمlookup-pathصراحةً. - حد الحجم: يمكن أن يصل حجم كل تخزين مؤقت إلى 10GB.
- مدة الاحتفاظ: يُحتفظ بالتخزين المؤقت لمدة 7 أيام بعد آخر وصول إليه. وتُحذف عمليات التخزين المؤقت القديمة وغير المستخدمة تلقائيًا.
ممارسات التخزين المؤقت الذكية
لتحقيق أقصى استفادة من التخزين المؤقت:
- استخدموا
hashFiles: اربطوا دائمًا مفتاح التخزين المؤقت بملفات بيان التبعيات، مثلpackage-lock.jsonوrequirements.txt. - حددوا
pathبدقة: خزّنوا مؤقتًا ما هو ضروري فقط، مثلnode_modulesو~/.cache/pip. - استخدموا
restore-keys: وفروا مفاتيح احتياطية لتحسين معدل العثور على التخزين المؤقت. - تجنبوا تخزين البيانات المتغيرة مؤقتًا: لا تخزنوا الملفات التي تتغير كثيرًا أو تكون كبيرة جدًا وفريدة لكل عملية تشغيل، مثل عناصر البناء المخصصة للنشر.
تحدي مفتاح التخزين المؤقت
لديكم مشروع Java يستخدم Maven. وقد عُرّفت تبعياته في pom.xml، ويخزن Maven عادةً ملفات JAR التي تم تنزيلها في ~/.m2/repository.
أي إعداد للتخزين المؤقت يضمن بشكل أفضل تخزين تبعيات Maven مؤقتًا وإبطالها بشكل صحيح عند تغير pom.xml؟
مراجعة: التخزين المؤقت للسرعة!
أحسنتم! لقد تعلمتم كيفية تطبيق التخزين المؤقت في GitHub Actions لتسريع مسارات CI/CD لديكم بشكل كبير.
- إجراء
actions/cacheهو أداتكم لتحقيق ذلك. - استخدموا
keyوpathلتحديد ما الذي تريدون تخزينه مؤقتًا وكيفية ذلك. - ينشئ
hashFilesمفاتيح ديناميكية للإبطال الذكي. - توفر
restore-keysبدائل احتياطية قيّمة.
من خلال التخزين المؤقت الذكي للتبعيات، توفرون وقت البناء والموارد الحاسوبية، مما يجعل مسارات العمل لديكم أكثر كفاءة!
الأسئلة الشائعة
هل درس «تخزين الاعتماديات مؤقتًا لتسريع التنفيذ» مجاني؟
نعم — نص درس «تخزين الاعتماديات مؤقتًا لتسريع التنفيذ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CI/CD with GitHub Actions & DevOps Pipelines، انتقل إلى CoddyKit PRO. تتضمن دورة CI/CD with GitHub Actions & DevOps Pipelines 4 دروس في المجموع.
ماذا ستتعلم في «تخزين الاعتماديات مؤقتًا لتسريع التنفيذ»؟
طبّقوا التخزين المؤقت لتسريع تنفيذ سير العمل بدرجة كبيرة، وذلك بإعادة استخدام الاعتماديات ومخرجات البناء المُنشأة. تتمرن على CI/CD with GitHub Actions & DevOps Pipelines مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CI/CD with GitHub Actions & DevOps Pipelines؟
لا تُشترط خبرة سابقة. CI/CD with GitHub Actions & DevOps Pipelines على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «تخزين الاعتماديات مؤقتًا لتسريع التنفيذ»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CI/CD with GitHub Actions & DevOps Pipelines هذا؟
نعم. كل درس في CI/CD with GitHub Actions & DevOps Pipelines يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عمليات البناء المصفوفية لبيئات متعددة
- تخزين الاعتماديات مؤقتًا لتسريع التنفيذ
- سير العمل والإجراءات القابلة لإعادة الاستخدام
- التنفيذ الشرطي واعتماديات المهام