DevOps

Bitbucket e o Ecossistema Atlassian Já leu

7 min de leitura

Bitbucket e o Ecossistema Atlassian
Há uma situação muito específica que justifica o uso do Bitbucket: a organização já tem o Jira como sistema central de rastreamento de trabalho, e a integração nativa entre repositório, pipeline e tickets é um requisito,

Há uma situação muito específica que justifica o uso do Bitbucket: a organização já tem o Jira como sistema central de rastreamento de trabalho, e a integração nativa entre repositório, pipeline e tickets é um requisito, não um diferencial. Nesse contexto, o Bitbucket não compete com o GitHub ou o GitLab pelo melhor repositório Git — ele compete sendo o repositório Git que melhor conversa com o restante do ecossistema Atlassian.

O Jira, o Confluence e o Bitbucket são os três produtos centrais do ecossistema Atlassian. A integração entre eles é profunda: um commit com a mensagem [PROJ-123] Fix null pointer exception in checkout automaticamente referencia e atualiza o ticket Jira PROJ-123. Um branch criado diretamente do Jira cria o branch no Bitbucket com o nome correto. O Confluence documenta os projetos e os links para repositórios e pull requests aparecem automaticamente nos espaços relevantes.

Para quem trabalha em uma organização onde o Jira é a fonte de verdade para o trabalho, ignorar essa integração é perder produtividade real.

Bitbucket Pipelines: CI/CD Nativo

O Bitbucket Pipelines é o sistema de CI/CD integrado ao Bitbucket Cloud — equivalente ao GitHub Actions e ao GitLab CI/CD. O arquivo de configuração é o bitbucket-pipelines.yml na raiz do repositório.

A sintaxe é mais simples do que o GitHub Actions ou o GitLab CI/CD, o que é tanto um ponto positivo (curva de aprendizado menor) quanto uma limitação (menos flexibilidade em cenários complexos):

# bitbucket-pipelines.yml

image: node:20-alpine  # Imagem padrão para todos os steps

definitions:
  # Serviços auxiliares (equivalente ao services: do GitLab)
  services:
    postgres:
      image: postgres:16-alpine
      environment:
        POSTGRES_DB: testdb
        POSTGRES_USER: testuser
        POSTGRES_PASSWORD: testpass
    redis:
      image: redis:7-alpine

  # Steps reutilizáveis (equivalente aos templates do GitLab)
  steps:
    - step: &instalar-dependencias
        name: Instalar dependências
        caches:
          - node  # Cache nativo do Bitbucket para node_modules
        script:
          - npm ci

    - step: &testes
        name: Testes unitários
        caches:
          - node
        services:
          - postgres
          - redis
        script:
          - npm ci
          - npm test -- --coverage
        artifacts:
          - coverage/**

pipelines:
  # Pipeline para pull requests
  pull-requests:
    '**':  # Qualquer branch com PR aberto
      - step: *instalar-dependencias
      - step: *testes
      - step:
          name: Lint e verificações de qualidade
          caches:
            - node
          script:
            - npm ci
            - npm run lint
            - npm run type-check

  # Pipeline para branches específicas
  branches:
    main:
      - step: *instalar-dependencias
      - step: *testes
      - step:
          name: Build da imagem Docker
          services:
            - docker
          script:
            # Bitbucket tem variáveis automáticas similares ao GitLab
            # $BITBUCKET_COMMIT, $BITBUCKET_BRANCH, $BITBUCKET_REPO_SLUG
            - IMAGE_TAG=$BITBUCKET_DOCKER_REGISTRY/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT
            - docker build -t $IMAGE_TAG .
            - echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin
            - docker push $IMAGE_TAG
      - step:
          name: Deploy em Staging
          deployment: staging  # Liga ao Deployment Environment do Bitbucket
          script:
            - pipe: atlassian/aws-eks-kubectl-run:2.2.0
              variables:
                AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
                AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
                AWS_DEFAULT_REGION: 'sa-east-1'
                CLUSTER_NAME: 'meu-cluster-eks'
                KUBECTL_COMMAND: >-
                  set image deployment/minha-app
                  app=$BITBUCKET_DOCKER_REGISTRY/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT
                  -n staging
      - step:
          name: Deploy em Produção
          deployment: production
          trigger: manual  # Equivalente ao when: manual do GitLab
          script:
            - pipe: atlassian/aws-eks-kubectl-run:2.2.0
              variables:
                AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
                AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
                AWS_DEFAULT_REGION: 'sa-east-1'
                CLUSTER_NAME: 'meu-cluster-eks'
                KUBECTL_COMMAND: >-
                  set image deployment/minha-app
                  app=$BITBUCKET_DOCKER_REGISTRY/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT
                  -n producao

  # Pipelines agendados (cron)
  custom:
    testes-nocturnos:
      - variables:
          - name: AMBIENTE
            default: staging
      - step:
          name: Testes de integração completos
          caches:
            - node
          script:
            - npm ci
            - npm run test:integration -- --env=$AMBIENTE

Pipes: Ações Prontas do Bitbucket

Uma característica diferenciada do Bitbucket Pipelines são os Pipes — blocos de funcionalidade empacotados que simplificam integrações com serviços externos. É o equivalente das Actions do GitHub Marketplace, mas com foco no ecossistema Atlassian e parceiros cloud.

A Atlassian mantém pipes oficiais para AWS (deploy no ECS, EKS, S3, Lambda), Azure, GCP, Kubernetes e ferramentas de qualidade como Snyk e Sonarqube. Usar um pipe é mais simples do que escrever os comandos equivalentes:

# Usando o pipe da AWS para deploy no S3 (site estático)
- step:
    name: Deploy no S3
    script:
      - npm run build
      - pipe: atlassian/aws-s3-deploy:1.1.0
        variables:
          AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
          AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
          AWS_DEFAULT_REGION: 'sa-east-1'
          S3_BUCKET: 'minha-app-frontend'
          LOCAL_PATH: 'dist'
          DELETE_FLAG: 'true'  # Remover arquivos deletados do bucket
          CACHE_CONTROL: 'max-age=31536000'

# Pipe para invalidar CloudFront após o deploy
- step:
    name: Invalidar cache do CloudFront
    script:
      - pipe: atlassian/aws-cloudfront-invalidate:0.6.0
        variables:
          AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
          AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
          AWS_DEFAULT_REGION: 'sa-east-1'
          DISTRIBUTION_ID: $CLOUDFRONT_DISTRIBUTION_ID

A Integração Jira-Bitbucket na Prática

A integração Jira-Bitbucket é automática quando os dois produtos pertencem à mesma organização no Atlassian Cloud. Não há configuração manual de webhooks ou tokens — a Atlassian gerencia a conexão internamente.

O que acontece na prática: quando um desenvolvedor cria um branch com o nome contendo o código do ticket Jira (por exemplo, feature/PROJ-456-autenticacao-oauth), o Jira automaticamente aparece no ticket PROJ-456 mostrando que há um branch ativo. Quando um commit é feito com PROJ-456 na mensagem, o Jira registra o commit no ticket. Quando o pull request é aberto, o ticket mostra o PR. Quando o PR é mergeado e o pipeline faz o deploy, o Jira pode ser configurado para transicionar automaticamente o ticket para "Em Produção".

Essa rastreabilidade bidirecional — do ticket ao código, do código ao deploy — sem configuração adicional é o principal argumento para o Bitbucket em organizações Jira-cêntricas.

Branch Permissions e Code Insights

O Bitbucket Cloud suporta Branch Permissions equivalentes às Branch Protection Rules do GitHub: exigir pull requests, número mínimo de aprovadores, impedir push direto na main, e exigir que o pipeline passe antes do merge.

O Code Insights é um recurso que permite que ferramentas externas de análise publiquem resultados diretamente no pull request — cobertura de testes, findings de segurança, análise estática. Sonarqube, Snyk e outras ferramentas têm integração nativa com o Code Insights do Bitbucket.

Bitbucket Data Center: Self-Hosted Enterprise

Assim como o GitLab tem a opção self-hosted, o Bitbucket tem o Bitbucket Data Center — a versão instalável em infraestrutura própria, com suporte a alta disponibilidade e clustering. É a escolha para organizações que precisam do ecossistema Atlassian mas não podem usar o cloud por razões regulatórias.

O Bitbucket Data Center pode ser instalado em servidores Linux próprios ou no Kubernetes via Helm Chart oficial da Atlassian. A configuração requer PostgreSQL externo, sistema de arquivos compartilhado (NFS ou equivalente para repositórios Git), Elasticsearch para busca e, opcionalmente, o Bamboo (CI/CD self-hosted da Atlassian) como alternativa ao Bitbucket Pipelines em ambientes on-premises.

Quando Não Usar o Bitbucket

O Bitbucket faz sentido em um contexto bem definido: organização que já usa Jira como ferramenta central e valoriza a integração nativa. Fora desse contexto, tanto o GitHub quanto o GitLab oferecem mais funcionalidades, comunidade maior e ecossistema de integrações mais rico.

O Bitbucket Pipelines, em particular, é menos poderoso do que o GitHub Actions (em termos de ecossistema de actions) e do que o GitLab CI/CD (em termos de funcionalidades enterprise como SAST integrado e templates avançados). Para times que não usam o Jira, a escolha entre GitHub e GitLab raramente passa pelo Bitbucket.

Referências para Aprofundamento

— Bitbucket Pipelines — Documentação Oficial: https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/ — Pipes do Bitbucket: https://bitbucket.org/product/features/pipelines/integrations — Integração Jira e Bitbucket: https://support.atlassian.com/jira-software-cloud/docs/use-jira-and-bitbucket-together/ — Bitbucket Data Center — Instalação: https://confluence.atlassian.com/bitbucketserver/install-bitbucket-data-center-776640391.html

Comentários

Mais em DevOps

Testes Automatizados no Pipeline: Qualidade sem Atrito
Testes Automatizados no Pipeline: Qualidade sem Atrito

Um pipeline de CI/CD sem testes automatizados é apenas um script de deploy co...

Artigo 26 — Seus Primeiros Recursos na AWS com Terraform
Artigo 26 — Seus Primeiros Recursos na AWS com Terraform

Artigo 26 — Seus Primeiros Recursos na AWS com Terraform Colocando Infraestru...

Compute, Storage e Redes no Azure
Compute, Storage e Redes no Azure

O artigo anterior estabeleceu a visão geral: como o Azure se organiza, como a...