CI/CD para Kotlin: configurando um pipeline do zero em um projeto real

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Você escreveu um projeto incrível em Kotlin. E agora, como entregar atualizações sem dor?

\n\n

Você 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\n

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

Vamos lá! 🚀

\n\n

O que é CI/CD e por que é importante para um desenvolvedor Kotlin?

\n\n

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

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

Hoje, construiremos um pipeline CI/CD completo para Kotlin no GitHub Actions. É gratuito para repositórios públicos e muito flexível.

\n\n

Passo 1. Preparação do projeto Kotlin

\n\n

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

Aqui está um exemplo de build.gradle.kts para uma aplicação de console simples:

\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: adicione pelo menos um teste para que o pipeline faça sentido.

\n\n

Exemplo de teste (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

Agora, faça commit e push do projeto no GitHub.

\n\n

Passo 2. Criando o primeiro pipeline de CI: compilação e testes

\n\n

Na raiz do repositório, crie a pasta .github/workflows e, dentro dela, o arquivo ci.yml.

\n\n

Aqui está um workflow mínimo do 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

O que acontece aqui:

\n
    \n
  • Triggers: push

Blogs

Book Recommendations