Devido a várias circunstâncias que levaram a uma implantação ruim no último ciclo de construção, fiz uma campanha em nosso escritório para realizar todas as implantações futuras com uma máquina de construção dedicada, e meu chefe aceitou esta proposta.
No entanto, em vez de usar uma máquina real em nosso escritório, estamos tendo que compartilhar uma única máquina com vários outros grupos - e o aborrecimento de ter que deixar meu escritório com todas as informações necessárias e depois descer um lance de escadas para outro escritório, apenas para executar uma compilação simples, está me fazendo pensar por que propus isso em primeiro lugar.
A idéia de ter uma máquina de compilação separada era, originalmente, separar meu próprio código gravado localmente do código de vários outros desenvolvedores e separar os arquivos seqüestrados que eu tinha na minha máquina da implantação. Foi também para resolver uma preocupação crescente que tive com nosso sistema de gerenciamento de arquivos ClearCase, que muitas vezes se recusa a me permitir implementar certas atividades de compilação, a menos que eu também inclua outra atividade da qual 'tenha dependências'.
Agora que estou realmente avançando nesse processo, estou pensando se não entendi completamente o propósito de usar uma máquina de compilação - e como estamos usando essa máquina apenas para implantação de código em nossos ambientes de teste, preparação e produção, e não para nossas implantações pessoais de teste de desenvolvedor, não tenho certeza se isso serve a algum objetivo.
Então, qual é o motivo real do uso de uma máquina de construção e eu cheguei perto de usá-la corretamente?
fonte
Respostas:
Normalmente você não teria apenas uma máquina de construção dedicada, mas também executaria um servidor de construção nessa máquina dedicada. Uma máquina de construção dedicada apenas oferece a vantagem de nunca bloquear o trabalho de um desenvolvedor e implantar a partir de uma máquina centralizada.
Um servidor de compilação oferece muito mais. Um servidor de build permite IC (integração contínua), o que significa que ele será criado automaticamente a cada push no seu VCS (como o git), podendo até executar testes de unidade se você os tiver e permitir "implantação com um clique". Os servidores de compilação podem notificá-lo por email se as compilações ou testes falharem. Eles oferecem dados históricos e tendências sobre o que aconteceu.
Geralmente, os servidores de compilação podem ser acessados por vários usuários ou equipes, usando um GUI da Web que é executado em um navegador.
No mundo Java, um dos servidores de compilação mais usados é o Jenkins. O Jenkins também funciona perfeitamente com compilações em C ++ (já que você parece usar essas duas linguagens). Jenkins se autodenomina servidor de automação, pois pode executar todos os tipos de tarefas que não precisam estar relacionadas à programação e construção.
fonte
Além da resposta de Traubenfuchs, você sugeriu outro motivo para uma máquina de construção em sua pergunta.
Só porque o software é construído na sua máquina, isso não significa que ele será desenvolvido na outra pessoa. Você pode confiar em alguns arquivos aleatórios que estão na sua máquina (e talvez nem estejam sob controle de versão). Você pode estar contando com algum aplicativo ou biblioteca esquecida chamada de um script de construção obscuro.
Se você possui uma máquina de compilação dedicada, deve saber o que está instalado nela. Isso deve estar bem documentado. Se houver a 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.
fonte
O principal motivo para ter uma máquina de compilação dedicada é obter compilações consistentes, independentemente de quem está fazendo a compilação. As 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 compilações de estações de trabalho de desenvolvimento é que os desenvolvedores podem compilar a partir de código que não está verificado no controle de versão.
Não está claro qual plataforma / idioma (s) você está usando, mas idealmente você deve ter um servidor de construção que extraia diretamente do controle de origem. Ou seja, quando uma construção é necessária, ela recupera a fonte de uma determinada versão do repositório e a compila automaticamente. Isso requer o uso de ferramentas de construção automatizadas para criar um script para a construção. Se você não tiver isso, esse deve ser o passo 1.
Lembre-se de que não há nada de errado em construir localmente para o desenvolvimento. Definitivamente, você deve 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 potencialmente para produção. Todas as atividades de controle de qualidade, como testes de integração e aceitação, devem ser realizadas apenas com construções do servidor de construção.
fonte
As outras respostas observaram corretamente que você deve automatizar a compilação, o que significa que não é necessário ir para outro escritório. No entanto, deixe-me propor um certo número de etapas que você pode executar para melhorar seu processo de criação:
Eu consideraria uma máquina compartilhada muito melhor do que compilaçõ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 nos mudando para um servidor dedicado com 40 núcleos de CPU virtual, dos quais os testes de desempenho exigem 17.
fonte
Você diz isso como se fosse uma coisa ruim.
Agora você tem um servidor de compilação comum pelo qual todas as suas compilações - a sua e a de outras equipes - são construídas. Consistência da compilação? Verifica.
Você ainda está executando a compilação manualmente e isso não é bom.
Você precisa de um processo do servidor para o qual você envia / solicita filas para que as compilações sejam feitas em seu nome e solicita que esse processo envie de volta o (s) resultado (s).
fonte
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 construçã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 é possível fazer backup facilmente da VM e também pode ser clonada facilmente em qualquer outro PC (incluindo sua própria máquina de desenvolvimento).
fonte
Ele fornece um local neutro e centralizado para executar compilações, independentemente das configurações de biblioteca IDE, SO, de desenvolvedores individuais.
Com uma máquina de compilação dedicada, é possível reconstruí-la sempre que houver um envio de código ao repositório. Quando alguém quebra a compilaçã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 quebrado com problemas de dependência ocultos, isso facilita a vida dos desenvolvedores porque tudo o que eles precisam fazer para que a construção funcione em sua máquina é copiar o que quer que seja está sendo feito na máquina de construção.
fonte