O que é um servidor de CI?

A integração contínua (CI) é uma prática de DevOps projetada para evitar os problemas que surgem da integração de mudanças no final do processo: conflitos de merge e erros de build seguidos por incontáveis ​​bugs e o terrível reconhecimento que seu software não faz realmente o que seus usuários precisam.

Com a integração contínua, você submete, compila e testa as alterações de código de todos à medida que avança. A integração frequente ao longo de um projeto significa que você pode minimizar conflitos, verificar como as mudanças de todos interagem e resolver quaisquer bugs antes que eles se tornem profundamente enraizados e usados como dependências por outras funcionalidades.

CI forms the first half of a continuous integration and delivery/deployment (CI/CD) pipeline – the ongoing process of committing, building, testing, staging and releasing each change, which delivers feedback at every stage and enables you to constantly iterate and improve.

A implementação de CI/CD requer mudanças culturais para permitir a colaboração entre diferentes funções, adoção de novos processos e workflows, além de ferramentas para automatizar as etapas envolvidas e viabilizar um pipeline eficiente.

Um servidor de CI (ou servidor de compilação) desempenha um papel fundamental na implementação e no gerenciamento de todo o processo. Ele serve como a cola que une todos os estágios do pipeline, aplicando sua lógica de negócios para coordenar tarefas automatizadas, agrupar e publicar feedback. Neste artigo, veremos com mais detalhes o que um servidor de CI faz e como ele pode ajudá-lo a aproveitar o máximo do CI/CD.

Integrando com o controle de fontes

At the start of any CI/CD pipeline is an integration with your version or source control system.

A implementação básica consiste em configurar seu servidor de CI/CD para reagir a commits no branch master e disparar o pipeline quando uma alteração tiver sido realizada.

Embora isso garanta que cada commit seja verificada e testada, deixa muito espaço para que indivíduos façam commit de algo que quebra o build, interrompendo o processo e evitando que outras alterações sejam verificadas até que o código problemático seja removido ou corrigido.

Configurar seu servidor de CI para construir e testar suas alterações antes do commit ajuda a prevenir esse tipo de problema e cria um ciclo de feedback adicional para cada desenvolvedor.

É importante ressaltar que o servidor de compilação desempenha as funções de viabilizador e garantidor: ele cuida da execução do build e dos testes numa máquina remota e envia os resultados de volta para o usuário, mas também torna esse processo uma condição para decidir se faz commit no master ou numa branch de recursos.

Outra etapa que você talvez queira considerar é integrar seu servidor de CI com sua ferramenta de revisão de código para que cada commit precise ser aprovado na revisão de código antes da confirmação, mas somente depois de de passar por uma etapa de build e testes com sucesso.

Aplicar essas camadas extras de lógica de negócios no início do processo ajuda a manter sua base de código limpa e pronta para lançamento, enquanto minimiza interrupções e atrasos no pipeline.

Gerenciando builds

Quando se trata das fases de build e teste de um pipeline de CI/CD, seu servidor de CI é o cérebro da operação, coordenando e alocando tarefas para agentes de build com base em diversos critérios.

Seus agentes de build, no entanto, fazem o trabalho pesado de executar builds e testes de acordo com instruções recebidas do servidor de CI.

É uma boa prática manter seu servidor de compilação distinto dos agentes de compilação nos quais você executa compilações e testes, pelo menos em uma configuração de produção, para evitar problemas de desempenho e contenção de recursos.

Ao usar seu servidor de CI para configurar a lógica para um estágio do seu pipeline, você poderá especificar uma gama de detalhes e regras. Por exemplo, você pode querer executar certos testes em commits para o branch master, mas não ao executar um build de pré-commit em branch de desenvolvimento, ou você poderá querer controlar quantos builds podem chamar um banco de dados de teste ao mesmo tempo.

Ser capaz de executar certas tarefas ao mesmo tempo usando diferentes agentes de build pode deixar seu pipeline mais eficiente. Isto é útil se você precisar executar testes em diferentes sistemas operacionais ou se estiver trabalhando numa base de código enorme com centenas de milhares de testes onde a única opção prática seja paralelizar. In the latter case, setting up a composite build will aggregate the results so you can treat the tasks as a single build step.

Um servidor de compilação que se integra à infraestrutura hospedada na nuvem, como a AWS, permitirá que você se beneficie de recursos elásticos e escaláveis para executar suas compilações e testes. Se suas necessidades de infraestrutura forem consideráveis, o suporte a agentes de build em containers e a integração com o Kubernetes permitirão que você gerencie seus recursos de build com eficiência, estejam eles na nuvem ou locais.

Definindo falhas

Uma parte fundamental de sua lógica de negócios envolve a definição do que constitui uma falha em cada estágio de seu pipeline de CI/CD.

Your CI server should allow you to configure various failure conditions, which it will then apply and use to determine the status of a particular step and whether to proceed to the next stage of the pipeline.

Além de falhas evidentes, como uma compilação retornando um código de erro ou testes que falham na execução, você pode definir outros tipos de falha com base nos dados coletados pelo seu servidor de compilação.

Os exemplos incluem a diminuição da cobertura de testes em relação ao build anterior (indicando que testes não foram adicionados em alterações de código mais recentes) ou o número de testes ignorados maior em comparação com o último build bem-sucedido.

Essas métricas servem como um aviso útil de que a qualidade do código pode estar se deteriorando. Ao disparar uma falha por esses motivos e limitar os usuários que têm permissão para ignorar essas falhas, você pode promover comportamentos desejáveis.

Ativando a entrega contínua

Embora o nome “servidor de CI” sugira que seu uso é limitado à integração contínua, a maioria dos servidores de CI também fornece suporte para entrega e implantação contínuas.

Depois de produzir seus artefatos de compilação e executar um conjunto inicial de testes durante a fase de integração contínua, a próxima etapa é implantar esses artefatos em ambientes de controle de qualidade para obter mais níveis de testes, seguido da preparação para que as suas partes interessadas possam testá-los e, se tudo parecer bom, colocá-los ao vivo.

As well as providing an artifact repository to store the outputs from each build so you can deploy them as needed, a CI/CD server can also store and manage parameters for each environment in your pipeline. Você pode então especificar se seus scripts de implantação são disparados automaticamente com base no resultado do estágio anterior.

Acompanhando o progresso

Fornecer feedback rápido de cada estágio é um elemento-chave de um pipeline de CI/CD.

Um servidor de compilação pode fornecer informações sobre trabalhos em fila, relatórios em tempo real sobre compilações e testes enquanto estão em andamento e o status das etapas de compilação concluídas.

Ao ativar as notificações, você pode garantir que você e sua equipe estejam cientes de quaisquer problemas tão logo eles surgirem, enquanto a integração com ferramentas de rastreamento de bugs significa que você poderá ver os detalhes das correções que foram incluídas num commit e pesquisar rapidamente a causa de uma falha. Dados históricos podem fornecer insights úteis para melhorar seu pipeline, assim como definir condições como parte da lógica do pipeline.

Concluindo

Um servidor de integração contínua desempenha um papel vital na implementação do seu pipeline de CI/CD, coordenando e acionando as várias etapas do seu processo e agrupando e entregando dados de cada estágio. Have a look at our Guide to CI/CD tools for tips on how to choose the right CI server for your organization.