النشر الآلي باستخدام Jenkins
أنشئوا مسار CI/CD في Jenkins لنشر حاويات Docker في بيئة مستهدفة
النشر الآلي باستخدام Jenkins درس مجاني في Docker & DevOps Fundamentals على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Docker & DevOps Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Docker & DevOps Fundamentals 4 دروس في المجموع.
مقدمة إلى النشر التلقائي
مرحبًا بك في الدرس الأخير حول CI/CD باستخدام Jenkins وDocker! سنركّز اليوم على أتمتة نشر حاويات Docker الخاصة بك.
النشر التلقائي هو عملية إصدار البرامج إلى بيئات الإنتاج أو التجهيز دون تدخل يدوي. وهو جزء مهم من التسليم والنشر المستمرين، إذ يضمن السرعة والاتساق والموثوقية.

لماذا نؤتمت النشر؟
قد يكون نشر التطبيقات يدويًا بطيئًا ومعرضًا للأخطاء وغير متسق. وتعالج الأتمتة هذه التحديات:
- السرعة: نشر الميزات الجديدة أو الإصلاحات بسرعة.
- الموثوقية: تقليل الأخطاء البشرية من خلال عمليات موحدة.
- الاتساق: ضمان اتباع كل عملية نشر للخطوات نفسها.
- الكفاءة: إتاحة الفرصة للمطورين للتركيز على كتابة الكود بدلًا من مهام النشر.
مراحل مسار النشر
يتضمن مسار Jenkins النموذجي لنشر Docker عدة مراحل أساسية:
- Build: إنشاء صورة Docker (وقد تناولنا ذلك في الدروس السابقة).
- Test: تشغيل الاختبارات التلقائية على الصورة.
- Push: دفع الصورة إلى Docker Registry.
- Deploy: سحب الصورة من السجل وتشغيلها على خادم مستهدف.
- Verify: التأكد من سلامة عملية النشر الجديدة.
سنركّز اليوم على مرحلتي 'Deploy' و'Verify'.
إعداد البيئة المستهدفة
قبل أن يتمكن Jenkins من النشر، يجب أن يكون الخادم المستهدف جاهزًا. ويعني ذلك عادةً ما يلي:
- Docker Installed: يجب تثبيت Docker Engine على الخادم المستهدف.
- SSH Access: يحتاج Jenkins إلى وصول آمن عبر Shell (SSH) إلى الخادم المستهدف.
- User Permissions: يحتاج مستخدم SSH إلى أذونات لتشغيل أوامر Docker.
نحن ندير عادةً بيانات اعتماد SSH بأمان داخل Jenkins.
بيانات اعتماد SSH في Jenkins
للاتصال بخادم بعيد، يستخدم Jenkins بيانات اعتماد SSH. وتتكون هذه البيانات عادةً من زوج يضم اسم مستخدم SSH ومفتاحًا خاصًا، ويتم تخزينه بأمان في مدير بيانات الاعتماد في Jenkins.
عند تعريف مسار، يمكنك إخبار Jenkins باستخدام بيانات الاعتماد هذه في مراحل محددة، مما يسمح له بتنفيذ الأوامر على الخادم المستهدف.
مثال على برنامج نصي أساسي للنشر
إليك برنامج نصي بسيط لـ shell يمكن تنفيذه على خادم مستهدف لتحديث حاوية Docker. إذ يوقف الحاوية القديمة ويزيلها، ثم يسحب الصورة الجديدة ويشغّلها.
سيتم تمرير APP_NAME وIMAGE_NAME كمتغيرين بيئيين.
#!/bin/bash
# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
# Pull the new Docker image
docker pull ${IMAGE_NAME}
# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment of ${APP_NAME} complete!"التكامل مع مسار Jenkins
في Jenkinsfile، يمكنك استخدام الإضافة sshPublisher أو خطوة sh بسيطة مع تمرير وكيل SSH لتنفيذ الأوامر على مضيف بعيد. إليك شكل مرحلة نشر باستخدام خطوة sh أساسية، بافتراض إعداد SSH.
تعني agent { label 'remote-deploy-host' } أن هذه المرحلة ستعمل على الخادم المستهدف.
stage('Deploy to Production') {
agent { label 'remote-deploy-host' }
steps {
withEnv([
"APP_NAME=my-webapp",
"IMAGE_NAME=myregistry/my-webapp:latest"
]) {
sh '''
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
docker pull ${IMAGE_NAME}
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment successful!"
'''
}
}
}تحقيق التحديثات التدريجية
لعمليات النشر دون توقف، لا يكفي الإيقاف والتشغيل البسيطان. وعادةً ما ستستخدم استراتيجية مثل:
- Rolling Update: استبدال الحاويات القديمة بالجديدة تدريجيًا، واحدة تلو الأخرى، مع ضمان استمرار توفر الخدمة.
- Blue/Green Deployment: نشر الإصدار الجديد (Green) إلى جانب الإصدار القديم (Blue)، ثم تحويل حركة المرور إليه.
يمكن لـ Jenkins تنسيق هذه العمليات، لكن أدوات مثل Docker Swarm أو Kubernetes توفر دعمًا أصليًا لاستراتيجيات أكثر تقدمًا.
التحقق من النشر
بعد النشر، من الضروري التحقق من أن التطبيق يعمل بشكل صحيح. وقد يشمل ذلك:
- Health Checks: إرسال طلبات HTTP GET بسيطة إلى نقطة فحص صحة التطبيق.
- Log Monitoring: فحص سجلات الحاوية بحثًا عن الأخطاء.
- Integration Tests: تشغيل مجموعة سريعة من الاختبارات على الإصدار المنشور حديثًا.
يمكن أن يتضمن مسار Jenkins لديك مرحلة 'Verify' لأتمتة عمليات التحقق هذه.
تحقق من معرفتك
تأمل مقتطف Jenkinsfile التالي الخاص بمرحلة نشر. ما الغرض الأساسي من docker stop ${APP_NAME} || true؟
مراجعة: النشر التلقائي
أحسنت! لقد تعلمت كيفية التعامل مع النشر التلقائي باستخدام Jenkins وDocker.
- يضمن النشر التلقائي إصدارات سريعة وموثوقة ومتسقة.
- تحتاج البيئات المستهدفة إلى Docker وإمكانية الوصول عبر SSH.
- يستخدم Jenkins بيانات اعتماد آمنة للاتصال بالخوادم البعيدة.
- توقف البرامج النصية للنشر عادةً الحاويات القديمة، وتسحب الصور الجديدة، ثم تشغّل الحاويات الجديدة.
- تُعد خطوات التحقق ضرورية للتأكد من نجاح النشر.
بهذا نختتم دورة CI/CD باستخدام Jenkins وDocker. واصل التدريب لإتقان هاتين الأداتين القويتين!
الأسئلة الشائعة
هل درس «النشر الآلي باستخدام Jenkins» مجاني؟
نعم — نص درس «النشر الآلي باستخدام Jenkins» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Docker & DevOps Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Docker & DevOps Fundamentals 4 دروس في المجموع.
ماذا ستتعلم في «النشر الآلي باستخدام Jenkins»؟
أنشئوا مسار CI/CD في Jenkins لنشر حاويات Docker في بيئة مستهدفة تتمرن على Docker & DevOps Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Docker & DevOps Fundamentals؟
لا تُشترط خبرة سابقة. Docker & DevOps Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «النشر الآلي باستخدام Jenkins»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Docker & DevOps Fundamentals هذا؟
نعم. كل درس في Docker & DevOps Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مقدمة إلى Jenkins
- إنشاء صور Docker باستخدام Jenkins
- النشر الآلي باستخدام Jenkins
- خط أنابيب Jenkins كتعليمة برمجية باستخدام Jenkinsfile