Você escreveu um projeto incrível em Kotlin. E agora, como entregar atualizações sem dor?
\n\nVocê fez commit do código, deu push no GitHub e… começou o ritual manual: compilar o jar, enviar para o servidor, reiniciar, verificar se nada quebrou. Familiar? E se o projeto cresce, surgem testes, linters, vários ambientes — a rotina consome horas, e um único comando esquecido pode derrubar a produção.
\n\nExiste uma solução — o pipeline CI/CD para Kotlin. É um pipeline automático que compila o projeto, executa testes, verifica o estilo do código e faz deploy no servidor após cada push. Neste artigo, mostrarei como configurar esse pipeline do zero usando GitHub Actions e Gradle. Você terá um modelo pronto que pode adaptar ao seu projeto — seja uma aplicação servidor em Ktor, um aplicativo Android ou uma biblioteca.
\n\nVamos lá! 🚀
\n\nO que é CI/CD e por que é importante para um desenvolvedor Kotlin?
\n\nCI (Continuous Integration) — Integração Contínua. Você faz push do código, e o sistema automaticamente o compila, testa e verifica a qualidade. CD (Continuous Delivery/Deployment) — Entrega ou Implantação Contínua. Após uma compilação bem-sucedida, o código vai automaticamente para o servidor (ou para a loja de aplicativos).
\n\nPara projetos Kotlin, o CI/CD é especialmente importante:
\n- \n
- Economia de tempo — não é necessário executar gradle build manualmente. \n
- Qualidade do código — testes e linters são acionados a cada commit. \n
- Segurança — a produção só é atualizada após um pipeline verde. \n
- Transparência — toda a equipe vê o status da compilação. \n
Hoje, construiremos um pipeline CI/CD completo para Kotlin no GitHub Actions. É gratuito para repositórios públicos e muito flexível.
\n\nPasso 1. Preparação do projeto Kotlin
\n\nAntes de escrever o pipeline, certifique-se de que seu projeto está pronto para CI/CD. Usarei uma estrutura típica com Gradle (Kotlin DSL).
\n\nAqui está um exemplo de build.gradle.kts para uma aplicação de console simples:
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: adicione pelo menos um teste para que o pipeline faça sentido.
\n\nExemplo de teste (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\nAgora, faça commit e push do projeto no GitHub.
\n\nPasso 2. Criando o primeiro pipeline de CI: compilação e testes
\n\nNa raiz do repositório, crie a pasta .github/workflows e, dentro dela, o arquivo ci.yml.
Aqui está um workflow mínimo do 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\nO que acontece aqui:
\n- \n
- Triggers: push