CI/CD para Kotlin: configuración de un pipeline desde cero en un proyecto real

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Has escrito un proyecto genial en Kotlin. ¿Y ahora cómo entregar actualizaciones sin dolor?

\n\n

Has 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\n

Hay 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\n

CI (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\n

Para 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
\n\n

Hoy construiremos un pipeline CI/CD completo para Kotlin en GitHub Actions. Es gratuito para repositorios públicos y muy flexible.

\n\n

Paso 1. Preparación del proyecto Kotlin

\n\n

Antes 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\n

Aquí tienes un ejemplo de build.gradle.kts para una aplicación de consola simple:

\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

Importante: agrega al menos una prueba para que el pipeline tenga sentido.

\n\n

Ejemplo de prueba (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

Ahora haz commit y sube el proyecto a GitHub.

\n\n

Paso 2. Creamos el primer pipeline de CI: compilación y pruebas

\n\n

En la raíz del repositorio, crea la carpeta .github/workflows y dentro el archivo ci.yml.

\n\n

Aquí tienes un workflow mínimo de GitHub Actions para 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

¿Qué sucede aquí?

\n
    \n
  • Disparadores: push

Blogs

Book Recommendations