CI/CD لـ Kotlin: إعداد خط أنابيب من الصفر على مشروع حقيقي

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

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

ابدأ الدورة

لقد كتبت مشروعًا رائعًا بلغة Kotlin. ولكن كيف تقوم بتسليم التحديثات دون ألم؟

\n\n

لقد قمت بعمل commit للكود، ودفعته إلى GitHub... وبدأت الطقوس اليدوية: تجميع jar، رفعه على الخادم، إعادة التشغيل، التحقق من أن كل شيء يعمل. هل هذا مألوف؟ وإذا كان المشروع ينمو، وتظهر الاختبارات، وأدوات فحص الكود، وبيئات متعددة - فإن الروتين يستهلك ساعات، وأمر واحد منسي يمكن أن ينهي الإنتاج.

\n\n

هناك حل - خط أنابيب CI/CD لـ Kotlin. إنه خط أنابيب تلقائي يقوم ببناء المشروع، وتشغيل الاختبارات، والتحقق من نمط الكود، ونشره على الخادم بعد كل عملية دفع. في هذه المقالة، سأوضح لك كيفية إعداد مثل هذا الخط أنابيب من الصفر باستخدام GitHub Actions و Gradle. ستحصل على قالب جاهز يمكنك تكييفه مع مشروعك - سواء كان تطبيق خادم على Ktor، أو تطبيق Android، أو مكتبة.

\n\n

هيا بنا! 🚀

\n\n

ما هو CI/CD ولماذا هو مهم لمطور Kotlin؟

\n\n

CI (Continuous Integration) - التكامل المستمر. تقوم بدفع الكود، ويقوم النظام تلقائيًا ببنائه واختباره والتحقق من جودته. CD (Continuous Delivery/Deployment) - التسليم أو النشر المستمر. بعد البناء الناجح، ينتقل الكود تلقائيًا إلى الخادم (أو متجر التطبيقات).

\n\n

بالنسبة لمشاريع Kotlin، يعتبر CI/CD مهمًا بشكل خاص:

\n
    \n
  • توفير الوقت - لا حاجة لتشغيل gradle build يدويًا.
  • \n
  • جودة الكود - يتم تشغيل الاختبارات وأدوات فحص الكود على كل commit.
  • \n
  • الأمان - يتم تحديث الإنتاج فقط بعد نجاح خط الأنابيب.
  • \n
  • الشفافية - يرى الفريق بأكمله حالة البناء.
  • \n
\n\n

اليوم سنبني خط أنابيب CI/CD كامل لـ Kotlin على GitHub Actions. هذا مجاني للمستودعات العامة ومرن جدًا.

\n\n

الخطوة 1. تحضير مشروع Kotlin

\n\n

قبل كتابة خط الأنابيب، تأكد من أن مشروعك جاهز لـ CI/CD. سأستخدم هيكلًا نموذجيًا مع Gradle (Kotlin DSL).

\n\n

إليك مثال على build.gradle.kts لتطبيق وحدة تحكم بسيط:

\n\n
plugins {\n    kotlin("jvm") version "1.9.22"\n    application\n}\n\napplication {\n    mainClass.set("com.example.MainKt")\n}\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    implementation(kotlin("stdlib"))\n    testImplementation("org.jetbrains.kotlin:kotlin-test")\n}\n\ntasks.test {\n    useJUnitPlatform()\n}
\n\n

هام: أضف اختبارًا واحدًا على الأقل حتى يكون لخط الأنابيب معنى.

\n\n

مثال اختبار (src/test/kotlin/com/example/AppTest.kt):

\n\n
import kotlin.test.Test\nimport kotlin.test.assertEquals\n\nclass AppTest {\n    @Test\n    fun testGreeting() {\n        assertEquals("Hello, Kotlin!", getGreeting())\n    }\n}
\n\n

الآن قم بعمل commit وادفع المشروع إلى GitHub.

\n\n

الخطوة 2. إنشاء أول خط أنابيب CI: البناء والاختبارات

\n\n

في جذر المستودع، أنشئ مجلد .github/workflows وداخله ملف ci.yml.

\n\n

إليك سير عمل GitHub Actions الأدنى لـ Kotlin:

\n\n
name: CI Pipeline for Kotlin\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up JDK 17\n        uses: actions/setup-java@v4\n        with:\n          java-version: '17'\n          distribution: 'temurin'\n\n      - name: Grant execute permission for gradlew\n        run: chmod +x gradlew\n\n      - name: Build with Gradle\n        run: ./gradlew build\n\n      - name: Run tests\n        run: ./gradlew test\n\n      - name: Archive test results\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: test-results\n          path: build/reports/tests/
\n\n

ماذا يحدث هنا:

\n
    \n
  • المشغلات: push

المدونات

توصيات الكتب