هذا الالتزام موجود في:
2026-07-26 19:57:48 +03:00
التزام a6e65f3f37
29 ملفات معدلة مع 3538 إضافات و0 حذوفات

80
q3-cicd/readme.md Normal file
عرض الملف

@@ -0,0 +1,80 @@
# بناء CI/CD Pipeline على غيمة
## 1. GitHub Actions Workflow
تم إنشاء GitHub Actions Workflow لأتمتة عملية بناء واختبار ونشر التطبيق على منصة Ghaymah Cloud.
يتم تشغيل الـ Workflow عند عمل `push` على فرعي `main` أو `develop`.
الخطوات الأساسية هي:
1. تحميل الكود من GitHub.
2. بناء Docker Image باستخدام `Dockerfile`.
3. تشغيل Container بشكل مؤقت واختبار `/health` للتأكد من أن التطبيق يعمل.
4. نشر التطبيق على بيئة Staging عند استخدام فرع `develop`.
5. نشر التطبيق على Production عند استخدام فرع `main` بعد الحصول على موافقة يدوية.
يتم تخزين بيانات تسجيل الدخول الخاصة بـ Ghaymah داخل GitHub Secrets باستخدام:
* `GHAYMAH_EMAIL`
* `GHAYMAH_PW`
---
## 2. Manual Approval قبل Production
تم استخدام GitHub Environment باسم `production` لإضافة مرحلة موافقة يدوية قبل النشر.
عند وصول الكود إلى فرع `main`، يتم تنفيذ عملية البناء والاختبار أولاً، ثم يتوقف الـ Workflow وينتظر موافقة الشخص المسؤول.
بعد الموافقة فقط يتم تنفيذ عملية النشر على Production باستخدام Ghaymah CLI.
هذا يمنع نشر أي إصدار جديد على Production بشكل تلقائي دون مراجعة.
---
## 3. الفرق بين Staging و Production
### Staging
بيئة تستخدم لاختبار التطبيق قبل نشره للمستخدمين الحقيقيين.
يتم نشر التغييرات عليها بشكل تلقائي من فرع `develop`، ويمكن استخدامها للتأكد من أن التطبيق يعمل بشكل صحيح.
### Production
هي البيئة التي يستخدمها المستخدمون الحقيقيون.
يتم النشر إليها من فرع `main`، ويتم وضع Manual Approval قبل عملية النشر لتقليل احتمالية نشر إصدار يحتوي على أخطاء.
الـ Workflow يكون كالتالي:
`develop → Build & Test → Staging`
`main → Build & Test → Manual Approval → Production`
---
## 4. الربط مع Ghaymah CLI
يتم تثبيت Ghaymah CLI داخل GitHub Actions Runner باستخدام الأمر:
`curl -sSL https://cli.ghaymah.systems/install.sh | bash`
بعد ذلك يتم تسجيل الدخول باستخدام بيانات Ghaymah المخزنة في GitHub Secrets:
`gy auth login`
ثم يتم تنفيذ عملية النشر باستخدام:
`gy resource app launch`
يستخدم Ghaymah CLI ملف `.ghaymah.json` الموجود في جذر المشروع لمعرفة إعدادات التطبيق، مثل:
* اسم التطبيق.
* Project ID.
* الـ Port المستخدم.
* اسم Dockerfile.
* إعدادات الوصول العام.
وبذلك يصبح GitHub Actions مسؤولاً عن أتمتة عملية CI/CD، بينما يقوم Ghaymah CLI بتنفيذ عملية النشر على منصة Ghaymah Cloud.

87
q3-cicd/workflow.yml Normal file
عرض الملف

@@ -0,0 +1,87 @@
name: CI/CD Pipeline
on:
push:
branches:
- main
- develop
jobs:
build:
name: Build Docker Image
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5.0.0
- name: Build Docker image
run: |
docker build -t go-app:${{ github.sha }} .
- name: Test Docker image
run: |
docker run -d \
--name go-app-test \
-p 8080:8080 \
go-app:${{ github.sha }}
sleep 3
curl --fail http://localhost:8080/health
docker stop go-app-test
docker rm go-app-test
deploy-staging:
name: Deploy to Staging
needs: build
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5.0.0
- name: Install Ghaymah CLI
run: |
curl -sSL https://cli.ghaymah.systems/install.sh | bash
- name: Login to Ghaymah
run: |
$HOME/ghaymah/bin/gy auth login \
--email "${{ secrets.GHAYMAH_EMAIL }}" \
--password "${{ secrets.GHAYMAH_PW }}"
- name: Deploy to Staging
run: |
$HOME/ghaymah/bin/gy resource app launch
deploy-production:
name: Deploy to Production
needs: build
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment:
name: production
steps:
- name: Checkout repository
uses: actions/checkout@v5.0.0
- name: Install Ghaymah CLI
run: |
curl -sSL https://cli.ghaymah.systems/install.sh | bash
- name: Login to Ghaymah
run: |
$HOME/ghaymah/bin/gy auth login \
--email "${{ secrets.GHAYMAH_EMAIL }}" \
--password "${{ secrets.GHAYMAH_PW }}"
- name: Deploy to Production
run: |
$HOME/ghaymah/bin/gy resource app launch