A BlueLabs acelera builds de Monorepo em 4x com o Semaphore

  • ⛔️️ Builds de 17 minutos
  • ⛔️ CI compila todos os projetos no monorepo
  • ⛔️ Alto custo de pipelines de CI
  • ✅ Builds de 4 minutos ⬇️ 4x
  • ✅ CI compila apenas o que mudou no monorepo
  • ✅ Solução econômica

Experimente o Semaphore

O desafio

A equipe de frontend começou a experimentar com um monorepo, enfrentando lançamentos com falhas devido a versões incompatíveis em seu próprio ecossistema. Querendo liberar o máximo de código possível e já experientes em publicar pacotes Node em repositórios privados, decidiram tentar o monorepo.

A primeira coisa que perceberam foi que o processo de build em um monorepo é mais lento. Isso era evidente, pois eles eram os únicos na empresa usando um monorepo, e isso se destacava na visão geral. Portanto, tiveram que destinar algum tempo para otimizar os pipelines, principalmente por meio do cache de dependências e artefatos e utilizando o Docker de forma mais eficiente.

De modo geral, a BlueLabs precisava que sua nova solução de CI/CD:

  • ✔️ Entendesse o que mudou em um monorepo
  • ✔️ Mantivesse os tempos de build sob controle
  • ✔️ Tivesse uma estratégia imediata para armazenamento de artefatos
  • ✔️ Estabelecesse um ciclo de feedback rápido para o código alterado

A solução

O monorepo da BlueLabs possui duas pastas principais: “apps” para aplicativos específicos de marca e “packages” para código compartilhado. O momento de insight veio quando perceberam que executar análise estática e testes apenas em um pacote levava mais tempo do que compilar todos os pacotes de uma vez. Foi então que decidiram adotar uma abordagem diferente: tornar os testes seletivos e manter os builds atômicos.

Essa percepção, combinada com a introdução de uma CI que testa apenas o código alterado, permitiu reduzir o tempo de build em 4x. Abaixo, você pode ver uma captura de tela da última execução, onde apenas uma pequena alteração de UI em um dos pacotes foi feita. Todo o código é compilado para entregar a aplicação, mas os testes e a análise estática são executados apenas onde as atualizações foram feitas.

Workflow BlueLabs no Semaphore

O segredo

O diferencial foi a adoção de uma nova função chamada change_in, que calcula as alterações nos commits recentes. Com ela, configurar a execução condicional em um monorepo é apenas uma questão de adicionar uma linha de código no pipeline.

Os resultados

O pipeline aprimorado permitiu que a BlueLabs estabelecesse um ciclo de feedback curto em seu desenvolvimento. As partes que mudaram são mais facilmente visíveis, o processo de build inteiro é mais rápido, e os desenvolvedores não precisam esperar o café esfriar para saber se os testes foram aprovados. A produtividade dos desenvolvedores melhorou e, ao mesmo tempo, a BlueLabs conseguiu reduzir custos em seu CI/CD.

À medida que os desenvolvedores ganhavam mais experiência com monorepos, eles também conseguiram definir condições de mudança mais específicas e otimizar o uso do cache de artefatos. Hoje, a base de código cresceu 30% desde que migraram para o monorepo, e a duração média do pipeline mais longo caiu de 17 para apenas 4 minutos.

Setor:

Apostas esportivas

Tamanho da Empresa

11-50 funcionários

Equipe de Engenharia

15 pessoas

Stack

Scala

Golang

Typescript

Star us on GitHub