CI/CD لمشاريع Go باستخدام GitHub Actions: دليل كامل

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

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

ابدأ الدورة

مقدمة في CI/CD لمشاريع Go



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



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



لماذا GitHub Actions لمشاريع Go تحديداً؟



  • مجاني للمستودعات العامة — حتى 2000 دقيقة بناء شهرياً مجاناً
  • دعم مدمج لـ Go — إجراءات رسمية لإعداد البيئة
  • مرونة — يمكن التشغيل على Ubuntu, Windows, macOS
  • التخزين المؤقت — تسريع عمليات البناء باستخدام ذاكرة تخزين مؤقت لوحدات Go modules
  • الاختبار المصفوفي — تشغيل متوازي على إصدارات مختلفة من Go


إنشاء خط أنابيب CI/CD أساسي



لنبدأ بإنشاء سير عمل بسيط سيتم تشغيله مع كل push إلى المستودع. للقيام بذلك، تحتاج إلى إنشاء ملف .github/workflows/go.yml في جذر مشروعك.



مثال على سير عمل أساسي



name: Go CI/CD

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.21', '1.22' ]

steps: - uses: actions/checkout@v4

- name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }}

- name: Cache Go modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-

- name: Install dependencies run: go mod download

- name: Build run: go build -v ./...

- name: Test run: go test -v -race -coverprofile=coverage.txt ./...

- name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.txt flags: unittests


يقوم سير العمل هذا بما يلي:

  • يتم تشغيله عند push إلى main/develop أو عند إنشاء pull request
  • يختبر على إصدارين من Go (1.21 و 1.22)
  • يخزن الوحدات مؤقتاً لتسريع عمليات البناء اللاحقة
  • يبني المشروع ويشغل الاختبارات مع العلامات -race (كاشف السباقات) و -cover (تغطية الكود)
  • يقوم بتحميل تقرير التغطية إلى Codecov


إعدادات متقدمة: الفحص اللغوي والأمان



بالنسبة لمشروع Go احترافي، لا يكفي مجرد بناء الكود واختباره. دعنا نضيف التحليل الثابت والتحقق من الأمان.



إضافة الفحص اللغوي باستخدام golangci-lint



- name: Lint  uses: golangci/golangci-lint-action@v3  with:    version: latest    args: --timeout=5m --out-format=colored-line-number    skip-pkg-cache: true


يقوم golangci-lint بدمج العشرات من أدوات الفحص اللغوي (govet, staticcheck, errcheck وغيرها) ويصدر تقريراً موحداً. يساعد هذا في العثور على الأخطاء المحتملة، والكود غير المستخدم، ومشاكل الأسلوب.



التحقق من الأمان باستخدام govulncheck



- name: Check vulnerabilities  run: |    go install golang.org/x/vuln/cmd/govulncheck@latest    govulncheck ./...


الأداة govulncheck تقوم بتحليل تبعيات المشروع بحثاً عن نقاط الضعف المعروفة من قاعدة بيانات Go Vulnerability Database. هذا أمر حاسم

المدونات

توصيات الكتب