Introdução

Concluído

O controle de versão é um aspecto crítico do desenvolvimento de software e do gerenciamento de pacotes. À medida que o software evolui, o controle de versão adequado garante que as dependências sejam controladas com precisão, as alterações sejam comunicadas efetivamente e os sistemas permaneçam estáveis.

Por que o controle de versão importa

Alterações de software ao longo do tempo. Os requisitos para o software não permanecem os mesmos.

Evolução do software:

  • Crescimento da funcionalidade: A funcionalidade que ele oferece e seu uso aumentarão, alterarão e se adaptarão com base nos comentários.
  • Evolução da plataforma: A hospedagem de um aplicativo também pode evoluir, com novos sistemas operacionais, novas estruturas e versões.
  • Correções: A implementação original pode conter falhas e bugs.
  • Alteração contínua: Seja qual for o motivo da mudança, é improvável que o software esteja estável e não precise mudar.

Impacto na dependência:

Como o software que você cria usa dependências em outros componentes, o mesmo vale para os componentes e pacotes que você cria ou usa durante a criação do software.

O controle de versão correto torna-se essencial para manter uma base de código para acompanhar qual parte do software está sendo usada no momento.

Controle de versão e gerenciamento de dependência

O controle de versão também é relevante para o gerenciamento de dependências, pois se relaciona com as versões dos pacotes e os componentes dentro.

Acompanhamento de dependências:

Cada dependência é identificada por seu nome e versão. Ele permite manter o controle dos pacotes exatos que estão sendo usados.

  • Identificação exclusiva: Nome + versão identifica exclusivamente um pacote.
  • Ciclo de vida independente: Cada um dos pacotes tem seu ciclo de vida e taxa de alteração.
  • Controle de versão: Habilita o controle preciso sobre quais versões de pacote são usadas.

Benefícios do controle de versão adequado:

  • Builds reproduzíveis: Certifique-se de que os builds produzam resultados consistentes.
  • Resolução de dependência: Os gerenciadores de pacotes podem resolver as versões corretas.
  • Avaliação de impacto: Entenda o escopo das alterações em novas versões.
  • Funcionalidade de reversão: Reverta para versões anteriores quando surgirem problemas.

Pacotes imutáveis

À medida que os pacotes obtêm novas versões, sua base de código pode escolher quando usar uma nova versão dos pacotes consumidos.

Especificação de versão

Ele faz isso especificando a versão específica do pacote necessário. Isso implica que os próprios pacotes sempre devem ter uma nova versão quando forem alterados.

Por que a imutabilidade importa:

Sempre que um pacote é publicado em um feed, ele não deve mais ser permitido de ser alterado. Se alterado, haveria o risco de introduzir mudanças que possam quebrar o código.

Princípio principal:

Em essência, um pacote publicado é imutável.

Regras de imutabilidade do pacote

Não é permitido substituir ou atualizar uma versão existente de um pacote. A maioria dos feeds de pacotes não permite operações que alterariam uma versão atual.

Impacto da imutabilidade:

  • Fiabilidade: Os consumidores podem confiar que uma versão não muda inesperadamente.
  • Consistência: Todos os consumidores obtêm o mesmo pacote para uma determinada versão.
  • Segurança: Impede a modificação mal-intencionada das versões existentes.
  • Capacidade de auditoria: O histórico de versão permanece intacto e rastreável.

Progressão de versão

Independentemente do tamanho da alteração, um pacote só pode ser atualizado introduzindo uma nova versão.

A nova versão deve indicar o tipo de alteração e o impacto que ela pode ter.

A numeração de versão indica:

  • Escopo das alterações: Atualizações principais, secundárias ou de patch.
  • Compatibilidade: Alterações que quebram versus alterações que não quebram.
  • Nível de qualidade: Pré-lançamento versus versão estável.
  • Intenção: O que a atualização se destina a realizar.

Visão geral do módulo

Este módulo explica estratégias de controle de versão para empacotamento, práticas recomendadas para controle de versão e promoção de pacotes.

Tópicos abordados:

  • Fundamentos do versionamento de artefatos: Compreensão de tipos de versão e esquemas.
  • Controle de versão semântico: Adotando o SemVer 2.0 para comunicação consistente.
  • Visualizações do Azure Artifacts: Usando as visualizações @Local, @Prerelease, e @Release.
  • Promoção de pacotes: Transferência de pacotes entre níveis de qualidade.
  • Controle de versão automatizado: Envio de pacotes via push em pipelines de CI/CD.
  • Práticas recomendadas: Implementando estratégias de controle de versão eficazes.

Objetivos de aprendizagem

Depois de concluir este módulo, os alunos e profissionais podem:

  • Entenda a importância do controle de versão: Reconheça por que o controle de versão adequado é fundamental para o gerenciamento de dependências e a estabilidade do software.
  • Implementar estratégias de controle de versão: Crie e aplique esquemas de numeração de versão efetivos para pacotes.
  • Use versionamento semântico: Aplique princípios de versionamento semântico (SemVer 2.0) para comunicar versões de forma consistente.
  • Gerenciar a qualidade do pacote: Use exibições do Azure Artifacts para separar pacotes por nível de qualidade.
  • Promover pacotes: Mova pacotes por meio de gateways de qualidade, do pré-lançamento para a produção.
  • Automatizar o versionamento: Envie pacotes pelas pipelines de build com números de versão apropriados.
  • Aplique as práticas recomendadas: Siga os padrões do setor para controle de versão e gerenciamento de pacotes.

Pré-requisitos

  • Compreensão do DevOps: Compreensão básica do que é o DevOps e seus conceitos.
  • Conhecimento do controle de versão: A familiaridade com os princípios de controle de versão é útil, mas não é necessária.
  • Experiência de entrega de software: Benéfico para ter experiência em uma organização que fornece software.
  • Acesso ao Azure DevOps: Você precisa criar uma Organização do Azure DevOps e um Projeto de Equipe para alguns exercícios. Se você ainda não o tiver, confira:
  • Noções básicas de gerenciamento de pacotes: Noções básicas sobre pacotes, feeds e gerenciamento de dependência de módulos anteriores.