CI/CD لمشاريع Go: GitHub Actions من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

CI/CD لمشاريع Go: GitHub Actions من الألف إلى الياء

\n\n

في تطوير البرمجيات الحديثة، أصبحت أتمتة عمليات البناء والاختبار والنشر (CI/CD) ضرورة وليست مجرد راحة. بالنسبة للمشاريع المكتوبة بلغة Go (Golang)، فإن استخدام GitHub Actions هو أحد أبسط وأكثر الطرق فعالية لتنظيم التكامل المستمر والتسليم المستمر. في هذه المقالة، سنستعرض دورة كاملة لإعداد خط أنابيب CI/CD لتطبيقات Go، بدءًا من التكوين الأساسي وصولاً إلى النشر التلقائي.

\n\n

ما هو GitHub Actions ولماذا هو مهم لـ Go؟

\n\n

GitHub Actions هي منصة مدمجة لأتمتة سير العمل (workflows) في مستودعات GitHub. تتيح لك إنشاء خطوط أنابيب يتم تشغيلها بناءً على أحداث معينة: الدفع إلى فرع، إنشاء طلب سحب، نشر إصدار، إلخ.

\n\n

بالنسبة لمشاريع Go، تقدم GitHub Actions العديد من المزايا الرئيسية:

\n
    \n
  • ترجمة سريعة — يتم ترجمة Go بسرعة كبيرة، مما يقلل من وقت تنفيذ خط الأنابيب.
  • \n
  • الربط الثابت — لا تتطلب الملفات الثنائية لـ Go تبعيات خارجية، مما يبسط عملية النشر.
  • \n
  • اختبار مدمج — أداة go test تتكامل بشكل ممتاز مع أنظمة CI.
  • \n
  • تعدد المنصات — من السهل بناء ملفات ثنائية لأنظمة تشغيل وبنى مختلفة.
  • \n
\n\n

إعداد خط أنابيب CI الأساسي

\n\n

لنبدأ بإنشاء سير عمل بسيط يقوم بتشغيل الاختبارات والتحقق من الكود وفقًا لمعايير Go. للقيام بذلك، في جذر المستودع الخاص بك، قم بإنشاء مجلد .github/workflows وملف ci.yml.

\n\n

مثال على التكوين الأساسي:

\n\n
name: CI Pipeline for Go\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    \n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v4\n\n    - name: Setup Go\n      uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n\n    - name: Cache Go modules\n      uses: actions/cache@v4\n      with:\n        path: ~/go/pkg/mod\n        key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}\n        restore-keys: |\n          ${{ runner.os }}-go-\n\n    - name: Download dependencies\n      run: go mod download\n\n    - name: Run vet\n      run: go vet ./...\n\n    - name: Run tests\n      run: go test -v -race -count=1 ./...\n\n    - name: Build\n      run: go build -o myapp ./cmd/app
\n\n

يقوم سير العمل هذا بالخطوات التالية:

\n
    \n
  • استنساخ المستودع.
  • \n
  • تثبيت Go الإصدار 1.22.
  • \n
  • تخزين الوحدات النمطية مؤقتًا لتسريع عمليات التشغيل اللاحقة.
  • \n
  • تحميل التبعيات عبر go mod download.
  • \n
  • تشغيل go vet للتحليل الثابت.
  • \n
  • تنفيذ الاختبارات مع علامة -race لاكتشاف سباقات البيانات.
  • \n
  • بناء الملف الثنائي.
  • \n
\n\n

تكوين متقدم: البناء عبر المنصات وأدوات الفحص

\n\n

تسمح Go ببناء التطبيقات لمنصات مختلفة بسهولة. سنضيف إلى خط الأنابيب مصفوفة بناء (build matrix) وتشغيل أداة الفحص golangci-lint.

\n\n

الملف المحدث ci.yml:

\n\n
name: Advanced Go CI/CD\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - name: golangci-lint\n      uses: golangci/golangci-lint-action@v4\n      with:\n        version: latest\n        args: --timeout=5m\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - run: go test -v -race -coverprofile=covera                

المدونات

توصيات الكتب