Melhorando Pipelines no Bitbucket: Cache, Reutilização de Steps e Execução Paralela

Melhorando Pipelines no Bitbucket: Cache, Reutilização de Steps e Execução Paralela

Introdução

Bitbucket Pipelines é uma ferramenta poderosa para integração contínua (CI) e entrega contínua (CD) que permite automatizar a construção, teste e implantação do seu código. Neste artigo, vamos explorar técnicas avançadas para otimizar suas pipelines no Bitbucket, incluindo o uso de cache, reutilização de steps e execução paralela de steps.

Benefícios das Técnicas Avançadas

  1. Uso de Cache: Reduz o tempo de execução da pipeline armazenando dependências entre builds.
  2. Reutilização de Steps: Facilita a manutenção e reduz a repetição de código.
  3. Execução Paralela de Steps: Diminui o tempo total de execução ao rodar múltiplos steps simultaneamente.

Configuração Básica

Vamos começar com uma configuração básica que utilizaremos como base para implementar as melhorias.

image: node:14 options: max-time: 5 # Limite de tempo para cada pipeline, em minutos pipelines: default: # Pipeline default - step: name: Install dependencies caches: - node script: - npm install - step: name: Run lint caches: - node script: - npm run lint - step: name: Run tests caches: - node script: - npm test - step: name: Run prettier caches: - node script: - npm run prettier - step: name: Build caches: - node script: - npm run build pull-requests: # Rodar essa pipeline na PR '**': - step: name: Install dependencies caches: - node script: - npm install - parallel: - step: name: Run lint caches: - node script: - npm run lint - step: name: Run tests caches: - node script: - npm test - step: name: Run prettier caches: - node script: - npm run prettier - step: name: Build caches: - node script: - npm run build
Enter fullscreen mode
Exit fullscreen mode

Implementando o Cache

Para usar cache de forma eficiente, vamos armazenar o diretório node_modules entre builds. Isso economiza tempo ao evitar reinstalações desnecessárias de dependências.

definitions: caches: node: ./node_modules
Enter fullscreen mode
Exit fullscreen mode

Reutilização de Steps

Para evitar repetição de código, definimos steps reutilizáveis em uma seção de definições. Aqui está um exemplo de steps comuns como instalação de dependências, lint, testes, prettier e build.

definitions: steps: - step: &install-dependencies name: Install dependencies caches: - node script: - npm install - step: &lint name: Run lint caches: - node script: - npm run lint - step: &test name: Run tests caches: - node script: - npm test - step: &prettier name: Run prettier caches: - node script: - npm run prettier - step: &build name: Build caches: - node script: - npm run build
Enter fullscreen mode
Exit fullscreen mode

Execução Paralela de Steps

Para reduzir o tempo total de execução da pipeline, podemos rodar certos steps em paralelo. A execução paralela é especialmente útil para tasks que não dependem uma da outra, como linting, testes e formatação de código.

Pipeline Final

Aqui está o arquivo bitbucket-pipelines.yml completo, implementando cache, reutilização de steps e execução paralela:

image: node:14 options: max-time: 5 # Limite de tempo para cada pipeline, em minutos definitions: caches: node: ./node_modules steps: - step: &install-dependencies name: Install dependencies caches: - node script: - npm install - step: &lint name: Run lint caches: - node script: - npm run lint - step: &test name: Run tests caches: - node script: - npm test - step: &prettier name: Run prettier caches: - node script: - npm run prettier - step: &build name: Build caches: - node script: - npm run build pipelines: default: # Pipeline default - step: *install-dependencies - parallel: # Rodar comandos em paralelo - step: *lint - step: *prettier - step: *build pull-requests: # Rodar essa pipeline na PR '**': - step: *install-dependencies - parallel: # Rodar comandos em paralelo - step: *lint - step: *test - step: *prettier - step: *build
Enter fullscreen mode
Exit fullscreen mode

Benefícios das Melhorias

  1. Uso de Cache:

    • Benefício: Reduz o tempo de execução das builds ao evitar reinstalações desnecessárias de dependências.
    • Como funciona: Armazena o diretório node_modules entre builds, fazendo com que apenas novas dependências sejam instaladas.
  2. Reutilização de Steps:

    • Benefício: Facilita a manutenção e reduz a duplicação de código, tornando a configuração mais limpa e gerenciável.
    • Como funciona: Define steps comuns em uma seção de definições e os referencia em diferentes pipelines.
  3. Execução Paralela de Steps:

    • Benefício: Diminui o tempo total de execução ao rodar múltiplos steps simultaneamente, acelerando o feedback para os desenvolvedores.
    • Como funciona: Usa a palavra-chave parallel para rodar steps que não dependem uns dos outros ao mesmo tempo.

Conclusão

Implementar cache, reutilização de steps e execução paralela em suas pipelines no Bitbucket pode trazer grandes melhorias em eficiência e manutenção. Essas práticas ajudam a otimizar o tempo de execução, reduzir a repetição de código e fornecer feedback mais rápido para os desenvolvedores, melhorando o fluxo de trabalho de CI/CD.

Caso queira dar uma olhadinha no código, segue o link do repositório:

Node-Example


Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Comments

No comments yet. Why don’t you start the discussion?

    Leave a Reply

    Your email address will not be published. Required fields are marked *