Has escrito un proyecto genial en Kotlin. ¿Y ahora cómo entregar actualizaciones sin dolor?
\n\nHas hecho commit del código, lo has subido a GitHub y… has comenzado el ritual manual: compilar el jar, subirlo al servidor, reiniciar, verificar que nada se haya caído. ¿Te suena? Y si el proyecto crece, aparecen pruebas, linters, varios entornos: la rutina devora horas, y un solo comando olvidado puede tirar la producción.
\n\nHay una solución: el pipeline CI/CD para Kotlin. Es un conducto automático que compila el proyecto, ejecuta pruebas, verifica el estilo del código y despliega en el servidor después de cada push. En este artículo, te mostraré cómo configurar dicho pipeline desde cero con GitHub Actions y Gradle. Obtendrás una plantilla lista para usar que puedes adaptar a tu proyecto, ya sea una aplicación de servidor con Ktor, una aplicación Android o una biblioteca.
\n\n¡Allá vamos! 🚀
\n\n¿Qué es CI/CD y por qué lo necesita un desarrollador Kotlin?
\n\nCI (Integración Continua) — integración continua. Subes código y el sistema lo compila, prueba y verifica la calidad automáticamente. CD (Entrega/Despliegue Continuo) — entrega o despliegue continuo. Después de una compilación exitosa, el código llega automáticamente al servidor (o a la tienda de aplicaciones).
\n\nPara los proyectos Kotlin, CI/CD es especialmente importante:
\n- \n
- Ahorro de tiempo — no es necesario ejecutar gradle build manualmente. \n
- Calidad del código — las pruebas y linters se activan en cada commit. \n
- Seguridad — la producción se actualiza solo después de un pipeline exitoso. \n
- Transparencia — todo el equipo ve el estado de la compilación. \n
Hoy construiremos un pipeline CI/CD completo para Kotlin en GitHub Actions. Es gratuito para repositorios públicos y muy flexible.
\n\nPaso 1. Preparación del proyecto Kotlin
\n\nAntes de escribir el pipeline, asegúrate de que tu proyecto esté listo para CI/CD. Usaré una estructura típica con Gradle (Kotlin DSL).
\n\nAquí tienes un ejemplo de build.gradle.kts para una aplicación de consola simple:
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\nImportante: agrega al menos una prueba para que el pipeline tenga sentido.
\n\nEjemplo de prueba (src/test/kotlin/com/example/AppTest.kt):
import kotlin.test.Test\nimport kotlin.test.assertEquals\n\nclass AppTest {\n @Test\n fun testGreeting() {\n assertEquals("Hello, Kotlin!", getGreeting())\n }\n}\n\nAhora haz commit y sube el proyecto a GitHub.
\n\nPaso 2. Creamos el primer pipeline de CI: compilación y pruebas
\n\nEn la raíz del repositorio, crea la carpeta .github/workflows y dentro el archivo ci.yml.
Aquí tienes un workflow mínimo de GitHub Actions para Kotlin:
\n\nname: 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¿Qué sucede aquí?
\n- \n
- Disparadores: push