Qual é o propósito de uma máquina de construção dedicada?

74

Devido a várias circunstâncias que levaram a um ciclo de última geração de implantação ruim, fiz campanha em nosso escritório para realizar todas as implantações futuras com uma máquina de construção dedicada, e meu chefe aceitou essa proposta.

No entanto, em vez de usar uma máquina real em nosso escritório, temos que compartilhar uma única máquina com vários outros grupos - e o incômodo de ter que sair do escritório com todas as informações necessárias e, em seguida, descer um vôo de escadas para outro escritório apenas para realizar uma construção simples está me fazendo pensar por que eu já propus isso em primeiro lugar.

A ideia de ter uma máquina de compilação separada era, originalmente, separar meu próprio código escrito localmente do código de vários outros desenvolvedores e separar quaisquer arquivos invadidos que eu tivesse na minha máquina da implantação. Foi também para resolver uma preocupação crescente que tive com o nosso sistema de gerenciamento de arquivos ClearCase, que muitas vezes se recusa a me permitir implantar certas atividades de compilação, a menos que eu também tenha incluído outra atividade para a qual ele 'tenha dependências'.

Agora que estou realmente avançando com esse processo, estou pensando se entendi mal o propósito inteiro de usar uma máquina de compilação - e já que estamos usando apenas essa máquina para implantação de código em nosso teste, preparo e produção ambientes, e não para nossas implantações pessoais de teste de desenvolvedor, não tenho certeza se serve a qualquer finalidade.

Então, qual é o motivo real para usar uma máquina de compilação e eu ainda estou perto de usá-la corretamente?

    
por Zibbobz 03.03.2017 / 15:02
fonte

7 respostas

137

Normalmente, você não teria apenas uma máquina de compilação dedicada, mas também executaria um servidor de compilação nessa máquina dedicada. Uma máquina de construção dedicada oferece apenas a vantagem de nunca bloquear o trabalho de um desenvolvedor e implantá-lo a partir de uma máquina centralizada.

Um servidor de compilação oferece muito mais. Um servidor de compilação permite CI (integração contínua), o que significa que ele será construído automaticamente a cada push para o seu VCS (como o git), pode até executar testes de unidade se você os tiver e permitir a "implantação de um clique". Os servidores de construção podem notificá-lo por email se compilações ou testes falharem. Eles oferecem dados históricos e tendências sobre o que aconteceu.

Geralmente, os servidores de criação podem ser acessados por vários usuários ou equipes, usando um web gui executado em um navegador.

No mundo Java, um dos servidores de compilação mais usados é o Jenkins. Jenkins funciona perfeitamente com compilações em C ++ (já que você parece usar essas duas linguagens). O Jenkins se chama servidor de automação, já que ele pode executar todos os tipos de tarefas que não precisam estar relacionadas à programação e construção.

    
por 03.03.2017 / 15:17
fonte
107

Além da resposta de Traubenfuchs, você sugeriu outro motivo para uma máquina de compilação em sua pergunta.

Só porque o software é compilado na sua máquina, isso não significa que ele será criado com base em qualquer outra pessoa. Você pode estar confiando em alguns arquivos aleatórios que por acaso estão em sua máquina (e podem nem estar sob controle de versão). Você pode estar confiando em algum aplicativo ou biblioteca esquecida que é chamado a partir de um script de construção obscuro.

Se você tiver uma máquina de construção dedicada, deverá saber o que está instalado nela. Isso deve estar bem documentado. Se houver necessidade de reconstruir o software, talvez anos depois, só será necessário criar uma nova máquina de compilação com o material documentado instalado.

    
por 03.03.2017 / 15:44
fonte
53

A principal razão para ter uma máquina de compilação dedicada é obter construções consistentes, independentemente de quem está fazendo a compilação. Estações de trabalho do desenvolvedor raramente são (lidas: nunca) idênticas. É difícil saber que cada compilação está usando as mesmas versões exatas de dependências e compiladores, etc. Um dos piores problemas com as compilações da estação de trabalho dev é que os desenvolvedores podem compilar a partir de código que não é verificado no controle de versão.

Não está claro quais plataformas / idiomas você está usando, mas o ideal é que você tenha um servidor de criação que seja puxado diretamente do controle de origem. Ou seja, quando uma compilação é necessária, ela recuperará a fonte de uma determinada versão do repositório e a compilará automaticamente. Isso requer o uso de ferramentas de criação automatizadas para criar scripts na construção. Se você não tem isso, deve ser o passo 1.

Tenha em mente que não há nada de errado em construir localmente para desenvolvimento. Você deve definitivamente estar trabalhando localmente, executando testes de unidade, análise de qualidade de código e aprimorando scripts de construção. Caso contrário, você estará perdendo muito tempo. A saída do servidor de construção é para qualquer coisa que você queira mover para produção. Todas as atividades de QA, como integração e teste de aceitação, devem ser feitas apenas com compilações do servidor de construção.

    
por 03.03.2017 / 15:42
fonte
18

As outras respostas corretamente observaram que você deve automatizar a construção, o que significa que não é necessário ir a outro escritório. No entanto, deixe-me propor um certo número de etapas que você pode seguir para melhorar seu processo de criação:

  • Primeiramente, configure o acesso remoto ao servidor de criação! Se você construir manualmente, digitando o comando "make", isso significa que você não precisa mais ir para outro escritório para digitar "make", você pode apenas SSH no servidor de compilação e digitar "make". Se você ainda não usa o make ou um sistema de compilação semelhante, utilize esse sistema de compilação.
  • Em segundo lugar, instale um ambiente de integração contínua que extraia automaticamente as alterações mais recentes do sistema de controle de versão (você tem um sistema de controle de versão, certo? se não, isso seria uma etapa adicional) e as constrói. Eu recomendo Jenkins. Configure o Jenkins para executar seus testes de unidade e testes de integração no nível do sistema (você tem os dois, certo? Caso contrário, crie-os a partir de testes de unidade e terminando em testes de integração no nível do sistema).
  • Em terceiro lugar, se você achar problemático o compartilhamento da mesma máquina com outras equipes (por exemplo, se você tiver opiniões diferentes sobre qual sistema operacional e qual versão e bittiness deve usar), considere o uso da virtualização. Um bom servidor hoje pode executar um grande número de máquinas virtuais. Talvez você possa configurar uma máquina de 32 bits e uma máquina de 64 bits para que você saiba que a construção funciona nas duas arquiteturas.
  • Por último, isso pode não ser necessário: se você precisa ter uma máquina dedicada, por exemplo, se o desempenho do seu aplicativo é de grande importância e outras execuções de testes / execuções ao mesmo tempo afetam muito os seus resultados, instale um dedicado servidor de hardware que apenas você usa. No entanto, em servidores recentes que podem ter até 40 núcleos de CPU virtual ou até mais, é relativamente simples criar algumas máquinas virtuais que não compartilham acesso aos mesmos núcleos de CPU.

Eu consideraria uma máquina compartilhada muito melhor do que as construções manuais. Meu projeto atual usa uma máquina virtual agora, mas devido à necessidade de testes de desempenho de integração no nível do sistema, estamos mudando para um servidor dedicado com 40 núcleos de CPU virtual dos quais os testes de desempenho exigem 17.

    
por 03.03.2017 / 19:25
fonte
16

... instead of getting an actual machine in our office to use, we're having to share a single machine with several other groups ...

Você diz isso como se fosse uma coisa ruim.

Agora você tem um servidor de criação comum em que todas as suas construções - a sua e as outras equipes - são criadas. Consistência de construção? Verifica.

... the hassle of having to leave my office with all the necessary information and then walk down a flight of stairs to another office just to perform a simple build is making me wonder why I ever proposed this in the first place.

Você ainda está executando o build manualmente e isso não é bom.

Você precisa de um processo de servidor para o qual você envia / enfileirar solicitações de compilações a serem feitas em seu nome e que esse processo envie de volta os resultados.

    
por 03.03.2017 / 16:24
fonte
1

Além de outras respostas relevantes, também parece que você está executando suas construções diretamente na máquina em questão.

Para um sistema de criação confiável, especialmente ao compartilhar a máquina de construção com outros usuários, é normal executar suas construções em uma máquina virtual. Isso garante que outros usuários não possam alterar o comportamento de suas compilações instalando suas próprias versões de aplicativos ou bibliotecas das quais seu código depende. Uma grande vantagem disso é que a VM pode ser facilmente armazenada em backup e também pode ser facilmente clonada em qualquer outro PC (incluindo sua própria máquina de desenvolvimento).

    
por 06.03.2017 / 15:18
fonte
1

Ele fornece um local centralizado e neutro para realizar construções, independentemente das configurações de biblioteca de IDE, SO e de desenvolvedores individuais.

Com uma máquina de construção dedicada, você pode tê-la reconstruída toda vez que houver um push de código no repositório. Quando alguém interrompe a construção, o processo pode enviar imediatamente um alerta para que o problema possa ser corrigido imediatamente.

Além de tornar tudo mais repetitivo e confiável e garantir que o repositório não esteja cheio de lixo com problemas de dependência ocultos, facilita a vida dos desenvolvedores, pois tudo o que eles precisam fazer para que a versão funcione em sua máquina para copiar o que está sendo feito na máquina de compilação.

    
por 06.03.2017 / 16:45
fonte