تحسين أداء GitLab CI باستخدام Docker: الحلول لتخزين الصورة بشكل فعّال
في بيئة تطوير GitLab CI، تعتبر إعدادات ملف .gitlab-ci.yml أمرًا حيويًا لتحسين أداء عملية البناء وتسريعها. من بين هذه الإعدادات، يأتي خيار “before_script” الذي يتيح للمطور تنفيذ الأوامر قبل تشغيل أي جزء من السيناريو الفعلي. ومع ذلك، قد تواجه تحديات فيما يتعلق بتخزين الصورة في Docker بعد تنفيذ هذه الأوامر، مما يؤثر على سرعة عمليات البناء.
على سبيل المثال، يمكن أن يكون ملف .gitlab-ci.yml كالتالي:
-
تعطل تطبيق عند استخدام setText()01/04/2024
-
أدوات تطوير موقع التسجيل باستخدام AngularJS28/03/2024
-
تحويل وظيفة PHP إلى Node.js04/04/2024
yamlimage: ubuntu
before_script:
- apt-get update -qq && apt-get install -yqq make ...
build:
script:
- cd project && make
ما قد لاحظته هو أن هذه التغييرات لا تتم تخزينها في Docker بعد تنفيذ الـ “before_script”، حيث كنت قد افترضت بسذاجة أن Docker سيقوم بتخزين الصورة تلقائيًا بعد تشغيل هذه الأوامر. لكن يمكن اللجوء إلى حلاً يتمثل في إنشاء صورة Docker على جهاز الـ “runner” يمكنها بناء البرنامج بدون أي تثبيت إضافي، ومن ثم الرجوع إليها في قسم “image” في ملف الـ yaml. ومع ذلك، يعتبر هذا الحلا غير فعّال في حال تحديث التبعيات، حيث يتعين عليك تسجيل الدخول إلى جهاز الـ “runner” وتحديث الصورة يدويًا.
هناك أيضًا أمر “cache” في ملف .gitlab-ci.yml، الذي جربت تعيينه إلى “untracked: true”، والذي كنت أعتقد أنه سيخزن كل شيء غير المتعلق بمشروعي، ولكن لم يبدو أن لديه أي تأثير.
هل هناك طريقة للحصول على السلوك الذي أتوق إليه؟
المزيد من المعلومات
بالطبع، دعنا نستكشف بعمق المشكلة ونبحث عن حلول إضافية لتحسين تجربة بناء البرنامج في GitLab CI باستخدام Docker Executor.
تبين أن هناك تحديات تتعلق بتخزين الصورة في Docker بعد تنفيذ الأوامر في قسم “before_script”. قد يكون الحلا الفعّال هو استخدام ميزة “cache” في GitLab CI بشكل أكثر دقة.
أولاً وقبل كل شيء، دعنا نتحدث عن كيفية استخدام “cache” بشكل صحيح. يمكنك تحسين استخدام “cache” عن طريق تحديد الملفات أو الفهارس التي ترغب في تخزينها. في حالتك، يمكنك محاولة شيء مشابه للتالي:
yamlimage: ubuntu
before_script:
- apt-get update -qq && apt-get install -yqq make ...
cache:
paths:
- /usr/share/apt
build:
script:
- cd project && make
هنا تم استخدام “cache” مع تحديد مجلد “/usr/share/apt” ليتم تخزينه بين عمليات البناء. يمكنك تعديل المسار حسب الحاجة، وربما يمكن تحديد المجلد الذي تريد تخزينه بعد تنفيذ “before_script”.
كما يمكنك النظر في إعادة هيكلة ملف .gitlab-ci.yml بشكل يسمح بتحسين تخزين الصورة. يمكن تجربة نقل بعض الأوامر من “before_script” إلى المرحلة الفعلية للبناء، مما قد يؤدي إلى تحسين في عملية التخزين.
أخيرًا، قد يكون من المفيد استخدام خيار “–no-cache” مع أمر “docker build” في حال كان ذلك ذا أهمية بالنسبة للمشروع الخاص بك، ولكن يجب أخذ الحيطة والحذر لضمان أن البيئة الخاصة بك ما زالت صالحة للاستخدام.
هل هناك أي معلومات إضافية يمكنني مساعدتك في البحث عنها؟