Skip to content
Latchkey

O Que É Idempotência no CI? Explicado

Idempotência significa que executar uma operação várias vezes tem o mesmo efeito que executá-la uma vez, a propriedade que torna retries e re-execuções seguros.

Retries só são seguros quando re-executar uma operação não pode causar danos. Idempotência é exatamente essa garantia. Se um job é idempotente, você pode repeti-lo livremente após uma falha transitória; se não é, um retry pode aplicar um efeito colateral em dobro e deixar uma bagunça.

O que idempotência significa

Uma operação idempotente produz o mesmo estado final independentemente de quantas vezes é executada. Definir um valor como 5 é idempotente; incrementar em 1 não é, porque repetir continua mudando o resultado. O estado final, não o número de execuções, é o que importa.

Por que importa para retries

Quando o CI repete um job que falhou, a primeira tentativa pode ter sido executada parcialmente. Se o trabalho é idempotente, o retry simplesmente converge para o estado final correto e a primeira tentativa parcial é inofensiva. Se não é, o retry pode fazer deploy em dobro, publicar em dobro ou corromper o estado.

Trabalho de CI idempotente vs não idempotente

  • Idempotente: fazer build de artifacts, rodar testes, aplicar infraestrutura declarativa.
  • Arriscado se não for protegido: fazer deploy, publicar um pacote, enviar notificações.
  • Tornado seguro com chaves de idempotência, verificações condicionais ou "create if not exists".

Projetando para isso

Prefira operações declarativas e convergentes (aplicar este estado desejado) a operações imperativas e cumulativas (adicionar mais um). Use chaves de idempotência para chamadas externas de modo que duplicatas sejam deduplicadas. Proteja etapas não idempotentes para que um retry detecte a tentativa anterior em vez de repeti-la.

O ângulo da Latchkey

Retries com autocorreção são mais seguros em trabalho idempotente. Os runners gerenciados com autocorreção da Latchkey repetem automaticamente jobs que falham por problemas transitórios e mecânicos para que um contratempo isolado não quebre o seu build, e um design de job idempotente garante que esses retries convirjam de forma limpa sem duplicar efeitos colaterais.

Principais conclusões

  • Idempotência significa que muitas execuções têm o mesmo efeito que uma.
  • É o que torna retries e re-execuções seguros.
  • Builds e testes são naturalmente idempotentes; deploys muitas vezes não são.
  • Use operações declarativas e chaves de idempotência para proteger efeitos colaterais.

Guias relacionados