Flutter CI/CD: o que é? Como funciona e como usar?

Flutter CI/CD: o que é? Como funciona e como usar?

Se trabalha ou estuda o desenvolvimento de aplicativos Flutter, é fundamental que você domine algumas habilidades.

Neste artigo, compreenda o que é CI/CD em Flutter - um conjunto de práticas que acelera e melhora a qualidade do seu trabalho.

Neste artigo, você aprenderá:

  • O que é Integração Contínua (CI) e suas vantagens;
  • O que é Entrega Contínua (CD) e suas vantagens;
  • Quais principais ferramentas para CI/CD com Flutter;
  • Como implementar o CI/CD no Flutter;
  • Qual é a importância de CI/CD no mercado de trabalho e nas empresas.

Segure-se e vamos lá!

CI/CD e o dia a dia de trabalho

No dia a dia de trabalho, você atua em conjunto com um time. Há tarefas e etapas no desenvolvimento de um aplicativo:

  • Escrever um código de qualidade;
  • Testar o funcionamento do projeto;
  • Revisar e refatorar o código, minimizando erros;
  • Publicar atualizações do app.

Você trabalha com vários profissionais: outras pessoas desenvolvedoras, analistas de qualidade, gerentes de produto e designers. Afinal, juntos vamos mais longe.

Infográfico que mostra os membros de um time de desenvolvimento mobile. O título é: “exemplo de um time de desenvolvimento de aplicativo. São demonstrados com ícones, uma pessoa dev 1, uma pessoa dev 2, designer, gerente de produto, scrum master, analista de qualidade.

Com o tempo, projeto cresce. Cada nova linha de código aumenta o desafio em manter um sistema de pé.

Imagine um aplicativo de banco, utilizado por milhões de pessoas. Um dia, uma pessoa dev erra no código do app. Daí, o usuário tenta pagar um boleto, mas o aplicativo quebra.

Seria possível minimizar problemas desse tipo?

Sim! Um código de qualidade reduz esses cenários caóticos. Mas é possível ir além.

A automatização de trabalhos manuais que fazem parte do desenvolvimento também diminui a margem de erros - e libera você para tarefas mais relevantes.

É aí que entram os superpoderes de CI/CD no Flutter: aumentar a qualidade e automatizar processos.

Mas, afinal, o que são CI/CD no Flutter?

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

O que é Integração Contínua (CI)?

Imagine uma equipe de remo onde cada pessoa rema em um ritmo diferente.

O barco não iria muito longe, certo?

O desenvolvimento de software sem CI pode ser um pouco assim. Nas grandes empresas, há vários times de devs trabalhando ao mesmo tempo.

Digamos que você esteja no time que vai atualizar a tela de Pix; e um amigo está no time que vai criar uma função de empréstimos.

Infográfico que mostra uma representação de dois times de desenvolvimento: o time pix, voltado a criar uma tela de pix mais bonita; e um time de emprésimos, que vai adicionar uma nova funcionalidade de empréstimos no aplicativo.

Ambos estão escrevendo código e modificando o projeto. Eventualmente, os códigos novos são mesclados em um repositório compartilhado (como o GitHub, ou o Bitbucket, GitLab, entre outros).

Chamamos esse processo de integração ou merge. Ou seja, os novos códigos dos times são integrados (mergeados) ao projeto já existente.

Vários deslizes podem ocorrer nessa hora - são os famosos “problemas de merge”.

Infográfico que explica o processo de integração (merge) que ocorre no desenvolvimento de aplicativos. Há dois quadrados. O primeiro tem o texto “novo código com novas funcionalidades pix; o segundo diz “novo código com novas funcionalidades de empréstimo”. Dos dois quadrados parte uma seta, acompanhada da palavra “merge”, em direção a um retângulo que representa a base de código já existente de um projeto. Por fim, os dois quadrados estão contidos no retângulo, demonstrando a integração (ou seja, merge) do código.

Como garantir uma integração mais tranquila das novidades produzidas pelos dois times (Pix e empréstimos)?

Com a integração contínua (CI)! Ela simplifica a integração de códigos, diminuindo o tempo e margem de erros.

Sabe a famosa “ansiedade antes do merge”? É isso que a CI soluciona, automatizando etapas e deixando o processo mais gerenciável e previsível.

Em vez de integrações esporádicas e grandes, você integra pequenas mudanças frequentemente. Assim, conflitos são detectados e corrigidos - e o desenvolvimento anda mais rápido.

Infográfico que exemplifica a diferença entre um projeto sem CI (com merges grandes e esporádicos ao longo de uma semana) e um projeto com CI (em que os merges são constantes, pequenos e diários.

E o que é CI no Flutter?

A Integração Contínua, abreviada como CI do inglês "Continuous Integration", é uma boa prática de desenvolvimento de software que incentiva as pessoas desenvolvedoras a integrarem suas mudanças no repositório central de código várias vezes ao dia.

A ideia principal da CI é identificar e resolver conflitos de integração, bugs e problemas de compatibilidade o mais cedo possível, idealmente no momento em que são introduzidos.

Perceba que a Integração Contínua envolve cinco princípios:

  • Cuidar da saúde do código;
  • Reduzir o custo de entrega;
  • Automatizar etapas;
  • Aumentar a qualidade;
  • Imprimir mais velocidade.

Para projetos Flutter em que a consistência e a qualidade entre diferentes plataformas são críticas, adotar a CI não é apenas uma boa prática: é um investimento no sucesso e na sustentabilidade do projeto.

Saiba que vamos usar o termo “build” durante o resto deste artigo. Se não conhece o sentido, um "build", no contexto da programação, é o processo de converter o código fonte em um software executável, envolvendo etapas como compilação (tradução do código para linguagem de máquina), linking (associação com bibliotecas necessárias).

E, por vezes, empacotamento (preparação do software para distribuição).

Quando você roda seu código, a IDE gera um “build de debug” que você vê e interage no emulador.

Quando você quer publicar seu app, o Flutter gera um “build de distribuição” que pode ser um app bundle (no caso do Android), um ipa (no caso do iOS), um exe (no caso do Windows), ou mesmo uma pasta com html, css e js (no caso de Web).

Como funciona CI no Flutter?

Na prática, a CI requer a automatização dos processos de teste e build do aplicativo. Ela envolve os seguintes passos:

  1. Controle de versão: Todos os códigos fonte são mantidos em um sistema de controle de versão, como o Git.
  2. Integração regular: Pessoas desenvolvedoras integram suas mudanças no repositório central várias vezes ao dia.
  3. Automatização de build: Cada integração dispara automaticamente uma build do sistema, garantindo que as mudanças não quebrem a aplicação.
  4. Testes automatizados: Junto com a build, são executados testes automatizados - dos unitários aos de integração e UI, dependendo da configuração.
  5. Feedback imediato: Se a build ou os testes falharem, a equipe é notificada imediatamente, permitindo uma rápida correção de problemas.
Infográfico que ilustra as etapas do processo de CI, que são: controle de versão, integração regular, automatização de build, testes automatizados e feedback imediato.

Quais os benefícios da CI?

  • Redução de bugs: Ao integrar e testar mudanças frequentemente, os bugs são identificados e corrigidos mais rapidamente.
  • Melhoria na qualidade do produto: Com testes automatizados abrangentes, a qualidade do software melhora.
  • Aumento da velocidade de desenvolvimento: A automatização dos processos de build e teste acelera o ciclo de desenvolvimento.
  • Feedback contínuo: Pessoas desenvolvedoras recebem feedback imediato sobre o estado do código, permitindo ajustes rápidos.
  • Colaboração e transparência: A CI promove uma cultura de transparência e colaboração, onde todos enxergam o processo de desenvolvimento e o estado atual do projeto.

Agora que entendemos a integração contínua, vamos descobrir a outra metade desse superpoder: CD.

O que é Entrega Contínua (CD) no Flutter?

Voltando ao exemplo do barco de remo: se a CI garante que todos remam no mesmo ritmo, a CD assegura que o barco navegue suavemente em águas abertas, capaz de ajustar a rota rapidamente conforme necessário.

Em outras palavras, enquanto a CI mantém o código integrado e testado, a CD prepara esse código para lançamento ao público a qualquer momento.

E o que é CD?

Entrega Contínua, ou CD, do inglês "Continuous Delivery", é uma prática de engenharia de software na qual o código é construído, testado e preparado para lançamento de maneira contínua.

O objetivo da CD é fazer lançamentos frequentes e em pequena escala.

Dessa forma, você e as demais equipes mantêm um ritmo constante de entrega, oferecendo novas funcionalidades, correções e atualizações às pessoas usuárias finais de forma rápida e confiável.

No caso de um aplicativo de banco, você lança pequenas atualizações na tela de Pix ou empréstimos, por exemplo.

Para devs Flutter, a CD acelera o ciclo de feedback com as pessoas usuárias, garantindo que as aplicações sejam rapidamente atualizadas em todas as plataformas suportadas pelo Flutter (iOS, Android, web, etc.).

Isso é valioso no ecossistema mobile, onde a expectativa por aplicativos ágeis e em constante evolução é alta.

A Entrega Contínua transforma como você entrega software, movendo-se para além do desenvolvimento e testes, e abordando o lançamento como parte do ciclo de vida do desenvolvimento.

Você também eleva a qualidade e a responsividade de suas aplicações Flutter - que ganham competitividade e se alinham às expectativas das pessoas usuárias.

Como funciona a CD no Flutter?

Na prática, dois processos são automatizados: distribuição para testes internos e lançamentos nas lojas (Google Play ou App Store).

O processo de CD aproveita a base estabelecida pela CI, adicionando os seguintes passos:

  1. Automatização do pipeline de lançamento: Após a CI concluir a build e os testes com sucesso, o código é automaticamente promovido através de várias etapas de preparação para lançamento, como testes de aceitação da pessoa usuária, testes de carga e performance.
  2. Ambiente de staging: O código pronto para lançamento é implantado em um ambiente de staging que replica o ambiente de produção, onde é revisado antes do lançamento.
  3. Lançamento manual ou automático: Dependendo da política da empresa, o lançamento é feito manualmente por um membro da equipe ou automaticamente, assim que o código passar por todas as verificações.
  4. Rollbacks automáticos: Se problemas forem detectados após o lançamento, o processo de CD pode automaticamente reverter para a última versão estável, minimizando o impacto para as pessoas usuárias finais. Esse processo de reversão é chamado de rollback.
Infográfico que ilustra as etapas do processo de CD, que são: automatização do pipeline de lançamento, ambiente de staging, lançamento manual ou automático e rollbacks automáticos.

O termo "pipeline" refere-se a uma série de etapas automatizadas que codificam o processo de levar o código do desenvolvimento até a produção.

Essas etapas podem incluir compilação, testes (unitários, integração, segurança, etc.), embalagem, implantação e monitoramento.

Em português, podemos dizer que pipeline contém “ambientes” que automatização a distribuição de um aplicativo de acordo com o público-alvo da build: devs (que testam); analistas de qualidade (que revisam qualidade) e o usuário final.

Ou seja, todas pessoas que baixam o aplicativo em uma loja virtual de apps como a Google Play Store.

Infográfico que ilustra possíveis pipelines ou ambientes do processo de CD. Cada etapa tem um usuário específico e alguns desafios. O ambiente de desenvolvimento é direcionado a devs e tem o objetivo de melhorar a qualidade de código e aplicar testes. O ambiente de homologação é voltado a profissionais como analistas de qualidade e gerentes de produtos; tem o objetivo de revisar e assegurar um aplicativo integrado e funcional, sem surpresas nos testes.  Por fim, o ambiente de produção mira o usuário final, e o aplicativo deve ser distribuído sem bugs.

Quais são os benefícios da CD?

  • Lançamentos rápidos e seguros: A CD permite que as equipes lancem novas funcionalidades e correções rapidamente, mantendo a estabilidade do aplicativo.
  • Feedback contínuo das pessoas usuárias: Lançamentos frequentes significam feedback rápido das pessoas usuárias, permitindo ajustes ágeis baseados nas necessidades e comportamento dos clientes.
  • Redução do risco de lançamento: Com lançamentos menores e mais frequentes, o risco associado a cada lançamento é significativamente reduzido.
  • Eficiência operacional: A automatização do processo de lançamento reduz a carga de trabalho manual e o potencial para erros humanos.
  • Melhoria contínua: A CD incentiva uma cultura de melhoria contínua, em que pequenas mudanças são continuamente implementadas e avaliadas.

Como você percebeu, CI/CD são práticas do dia a dia de trabalho que envolvem a gestão e automatização de alguns processos. Isso é feito com ajuda de ferramentas que veremos na sequência.

Ferramentas de CI/CD para Flutter

Atualmente no mercado, três ferramentas são mais utilizadas (e recomendadas oficialmente pelo Flutter) para CI/CD:

  1. Codemagic;
  2. Bitrise;
  3. Appcircle.

Vamos ver cada uma delas.

Codemagic

Parece magia, mas é tecnologia!

O Codemagic, uma das primeiras e mais populares ferramentas de CI/CD dedicadas ao Flutter, permite a configuração simplificada de pipelines de CI/CD.

Desde a execução de testes automatizados até a entrega de builds para lojas de aplicativos, o Codemagic se destaca pela sua facilidade de uso e integração direta com repositórios de código como GitHub, GitLab e Bitbucket.

Vantagens do Codemagic

  • Especialização no Flutter: Projetado para o Flutter, o Codemagic atende as especificidades dessa framework, proporcionando integrações suaves e processos otimizados.
  • Simplicidade: Com sua interface intuitiva, configurar e gerenciar seu pipeline de CI/CD é um processo direto e mais acessível para iniciantes.

Desvantagens do Codemagic

  • Custo: Há um plano gratuito e limitado, porém projetos maiores podem rapidamente ultrapassar esse limite, exigindo uma assinatura paga.
  • Recursos avançados: Algumas pessoas desenvolvedoras encontram limitações em configurações mais complexas ou em casos de uso muito específicos.

Bitrise

O Bitrise é outra ferramenta poderosa que suporta Flutter, além de outros frameworks móveis.

Oferece uma ampla gama de workflows personalizáveis e integrações com serviços de terceiros, fazendo dela uma escolha versátil para equipes que trabalham em projetos multiplataforma.

Vantagens

  • Versatilidade: Além do Flutter, o Bitrise suporta várias outras plataformas, tornando-o ideal para projetos com múltiplas tecnologias.
  • Extensibilidade: Com uma vasta biblioteca de integrações e plugins, é possível personalizar o pipeline de CI/CD para atender a quase qualquer necessidade.

Desvantagens

  • Curva de Aprendizado: Devido a sua ampla gama de funcionalidades, novas pessoas usuárias podem achar o Bitrise um pouco intimidador no início.
  • Custo: Assim como o Codemagic, projetos maiores pedem investimento em planos mais robustos.

Appcircle

Focada na automação de builds móveis, a Appcircle fornece um ambiente CI/CD que suporta Flutter.

Com recursos de teste automatizado e distribuição de aplicativos, Appcircle facilita a gestão de builds e a colaboração entre times de desenvolvimento.

Vantagens

  • Interface amigável: Com um foco na simplicidade, o Appcircle facilita a configuração e gestão de pipelines de CI/CD.
  • Feedback rápido: Com builds otimizadas e feedback instantâneo, é mais fácil manter a produtividade e o foco na qualidade.

Desvantagens

  • Recursos limitados para projetos complexos: Embora excelente para muitos projetos, Appcircle não oferece a mesma profundidade de configuração que algumas equipes avançadas podem requerer.
  • Suporte multiplataforma: O suporte é decente, mas pode não ser tão abrangente quanto outras ferramentas para projetos que não são exclusivamente Flutter.

Implementando CI/CD em projetos Flutter

Já sabemos que acelerar o desenvolvimento, automatizar tarefas e agregar qualidade no produto são os superpoderes de CI/CD no Flutter.

Mas como colocá-los em prática?

Primeiros passos com CI no Flutter

O primeiro passo para implementar CI em um projeto Flutter é escolher a ferramenta certa.

Codemagic é frequentemente a escolha predileta, por conta de sua integração nativa com Flutter e configuração simplificada, conforme destacado neste curso de CI.

O Codemagic requer criação de conta e sua integração com sua conta no GitHub. Feito isso, os principais passos são:

  1. Configurar o pipeline de CI: Conecte o seu repositório de código ao Codemagic (ou à ferramenta de CI de sua escolha). Isso geralmente envolve adicionar um arquivo de configuração YAML ao seu projeto, que define o pipeline de CI;
  2. Automatizar testes: Configurar a execução automática dos seus testes no Flutter é essencial. Isso inclui testes unitários, testes de widgets e testes de integração. A cada push para o repositório, automaticamente a ferramenta de CI executa todos os testes para garantir que as mudanças não causem novos bugs;
  3. Colher feedback contínuo: Configure a ferramenta para notificar a sua equipe sobre o sucesso ou falha dos builds e testes. Isso facilita uma correção rápida no caso de problemas.

Com a base de CI preparada, você pode implementar o outro lado da moeda, que é o CD.

Infográfico que ilustra o processo de CI e CD com um símbolo do infinito, ou seja, duas curvas entrelaçadas que mostram como CI e CD se completam e são interdependentes.

Avançando para CD com Flutter

No processo de CD, após a passagem bem-sucedida pelos testes de CI, o aplicativo é lançado para ambientes de testes ou produção, de forma automática (ou com aprovação manual). Os passos são:

  1. Fazer o deploy automático para lojas de aplicativos: Utilizando ferramentas como Codemagic, você automatiza o processo de lançamento (deploy) do seu app Flutter na Google Play Store e Apple App Store. É necessário configurar assinaturas de código, perfis de provisionamento e tokens de API para as lojas de aplicativos.
  2. Configurar ambientes de Staging e produção: É recomendável separar ambientes para staging (teste) e produção. Assim, você testa o aplicativo em um ambiente que imita a produção, sem afetar as pessoas usuárias finais - é um “ensaio” para o lançamento oficial. A CD facilita o deploy para esses ambientes com base em regras específicas que você pode configurar, como lançamentos apenas a partir do branch principal ou após aprovação manual;
  3. Rollbacks e gestão de configuração: Um superpoder da CD é a capacidade de reverter a aplicação rapidamente para uma versão anterior estável em caso de problemas. Se você lança uma atualização com a versão 2 da tela de pix e ela quebra o aplicativo, é possível reverter para a versão 1, rapidamente solucionando uma dor de cabeça. Além disso, a gestão eficaz das configurações de ambiente mantém a consistência entre os deploys.

Os aplicativos de larga escala (pense no mundo real: iFood, Uber, Google Maps, Netflix, Spotify) são utilizados por milhões de pessoas.

Imagine se, por conta de um erro de código, milhares ficam sem ouvir músicas no Spotify ou mandar mensagens no WhatsApp? O caos se instaura!

Estrategicamente, as empresas desenvolvem boas práticas como CI/CD para remediar problemas e garantir a estabilidade dos produtos e serviços.

Desafios e melhores práticas

A implementação de CI/CD em projetos Flutter não está livre de desafios. A configuração inicial pode ser complexa, e a manutenção do pipeline requer atenção contínua.

No entanto, são imensas as recompensas — em termos de eficiência, qualidade e satisfação da pessoa usuária.

Algumas melhores práticas incluem:

  • Documentar com detalhes: Documente e atualize o seu pipeline de CI/CD e processos relacionados e deixando-os acessíveis para toda a equipe;
  • Fazer revisão e otimização contínuas: Regularmente, reveja e otimize seu pipeline de CI/CD para melhorar a eficiência e reduzir os tempos de build;
  • Cultura de qualidade: Promova uma cultura de qualidade dentro da equipe, onde todos são responsáveis pela saúde do código e pela experiência do usuário. Implementar CI/CD em seus projetos Flutter muda como sua equipe desenvolve e entrega software, tornando o processo mais rápido e confiável.

Por que o CI/CD é indispensável no Flutter?

Implementar CI/CD em seus projetos Flutter evita dores de cabeça e garante uma entrega contínua de valor para as pessoas usuárias.

Assim, você confia que cada linha de código contribui para o produto final.

Com ferramentas certas e boa estratégia, o CI/CD facilita que equipes, grandes ou pequenas, inovem rapidamente sem arriscar a estabilidade ou a qualidade.

Além disso, é indispensável para a sua carreira! Diversas vagas de emprego solicitam CI/CD (especialmente as técnicas de automatização).

Os benefícios de dominar CI/CD superam, de longe, os desafios da curva de aprendizado.

Quem cuida de CI/CD na empresa?

Depende! Em geral, nas grandes empresas, o processo de CI/CD fica na mão de pessoas mais experientes (níveis pleno e sênior).

Porém, em empresas pequenas, há uma exceção! Por vezes, o time é enxuto ou há apenas uma pessoa responsável pelo desenvolvimento.

Então, talvez alguém mais iniciante ou júnior assuma a integração e entrega contínuas.

Em startups ou algumas empresas pequenas, pode ainda nem existir o processo de CI/CD - e tudo é feito na mão!

Se você busca se destacar no mercado, pode sugerir essa boa prática onde não se utiliza CI/CD - com certeza, você ganhará pontos por isso.

Conclusão

Se o Flutter flexibiliza o desenvolvimento multiplataforma, o CI/CD suaviza esse processo do início ao fim.

Esse superpoder aumenta a qualidade, derrotando vilões como erros de código e problemas de merge.

E poupa você de trabalhos manuais! O futuro é agora; e ele é automatizado.

Bateu o interesse pelo assunto? Estude CI/CD com a gente:

E aí, já tinha ouvido falar de CI/CD no Flutter? Já usou essas técnicas em algum projeto?

Conte para nós, marcando os perfis da Alura em suas redes sociais e usando a hashtag #AprendiNaAlura para compartilhar sua experiência de desenvolvimento.

Vejo você por aí no maravilhoso mundo do Flutter!

Referências

Continue seus estudos:

Ricarth Lima
Ricarth Lima

Acredito que educação e computação podem mudar o mundo para melhor, em especial, juntas. Por isso além de fazer parte do Grupo Alura, sou professor, desenvolvedor de jogos educativos e criador de conteúdo! Amo Flutter e Unity!

Veja outros artigos sobre Mobile