3.1 Fazendo mudanças no código
Como eu tinha dito antes, o desenvolvimento de software se resume a fazer pequenas alterações no código. Milhões de programadores estão nesse processo há décadas, o que levou a um refinamento, padronização e formalização cuidadosa em todos os sentidos possíveis.
Para armazenar o código, existe um programa especial – Git. Git é um sistema de controle de versão distribuído. Ele não só armazena o código, mas também rastreia todas as mudanças nele e ajuda os programadores a trabalharem juntos em projetos sem atrapalhar uns aos outros.
Com o Git, os desenvolvedores podem criar diferentes versões de um projeto (branches), armazenar um histórico completo de mudanças e até voltar para qualquer momento no passado. É como uma máquina do tempo para o código! O Git ajuda a unir mudanças e resolver conflitos, por isso se tornou a principal ferramenta para trabalho em equipe no desenvolvimento moderno.
3.2 Montando o projeto
Antes de testar ou enviar o projeto para o servidor, ele precisa ser montado.
A montagem de projetos é o processo de compilar o código-fonte do projeto em programas executáveis ou outros formatos que possam ser executados, muitas vezes incluindo testes e implantação. Esse é um aspecto chave do desenvolvimento de software, garantindo que o programa esteja pronto para uso.
Montagem não é apenas compilação, embora a compilação geralmente faça parte do processo de montagem. Depois de terminar a montagem, você pode acabar com dezenas ou até centenas de arquivos que precisam ser enviados para vários servidores.
Os montadores podem ser de baixo nível, como:
Maven e Gradle são amplamente utilizados em projetos Java para gerenciamento de dependências e montagem de projetos.
Apache Ant é outra ferramenta para montagem de projetos em Java, oferece mais flexibilidade na escrita de scripts de montagem.
MSBuild é usado para montagem de projetos criados com Microsoft Visual Studio.
Make é a ferramenta clássica de montagem, utilizando Makefile para definir regras de montagem, especialmente popular em projetos C e C++.
Webpack é frequentemente usado para montagem de aplicativos JavaScript, gerenciando dependências e módulos.
Gulp e Grunt são ferramentas que ajudam a automatizar tarefas que são frequentemente realizadas no desenvolvimento de aplicativos web, como minificação de arquivos e compilação de SCSS para CSS.
Também existem montadores de alto nível. Mais sobre eles a seguir.
3.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) é uma metodologia que envolve a integração contínua de mudanças de todos os branches de desenvolvimento no branch principal, além do teste e implementação automáticos dessas mudanças. Isso permite identificar e corrigir erros rapidamente, aumentando a eficiência e velocidade do desenvolvimento.
Um dos sistemas CI/CD mais comuns, embora um pouco ultrapassado, é o Jenkins. Se você trabalha numa empresa pequena, há 80% de chance de estar usando ele.
Jenkins é um sistema de automação popular, usado para integração e entrega contínuas (CI/CD). Jenkins permite automatizar várias etapas do desenvolvimento de software, incluindo montagem, testes e implementação, o que melhora a qualidade do código e acelera o processo de desenvolvimento.
Se você estiver em uma empresa grande, pode haver mais 5 opções para escolher:
TeamCity é um potente sistema comercial da JetBrains. Oferece integração profunda com diversos ambientes de desenvolvimento e teste.
GitLab CI é parte integrada do GitLab, oferecendo integração e entrega contínuas com possibilidade de configuração via arquivos YAML.
CircleCI é um serviço em nuvem CI/CD, suporta automação de teste e implementação para vários projetos.
Travis CI foi um dos primeiros serviços CI em nuvem, usado em muitos projetos de código aberto. Integra-se bem com o GitHub.
Bamboo é um produto da Atlassian, integra-se estreitamente com outras ferramentas da empresa, como Jira e Bitbucket.
Conhecê-los e saber trabalhar com eles não é necessário – geralmente na empresa há especialistas DevOps que configuram todos esses processos. Você só precisa saber que eles existem e entender do que se trata quando alguém menciona Jenkins, CI/CD ou “continuous integration”.
3.4 Entregando o projeto no servidor
Não basta escrever o projeto – ele precisa chegar ao seu servidor. Em geral, a implantação (deploy) do projeto no servidor é o processo de colocar e ativar um aplicativo web no servidor de forma que ele esteja disponível aos usuários pela internet.
Este processo inclui a transferência de arquivos do projeto para o servidor, configuração do ambiente do servidor, bancos de dados, dependências, assim como a configuração das definições de rede e segurança.
E você acha que seu código chega ao servidor como? Alguém vai enviá-lo para lá? Ou, talvez, você se conecte via SSH ao servidor remoto, envie alguns arquivos para lá e configure tudo? Relaxa: ninguém faz mais isso. Agora tem o Docker.
Docker é uma plataforma para desenvolvimento, entrega e execução de aplicativos com o uso de contêineres. Docker simplifica a criação, implementação e execução de aplicativos, empacotando-os junto com todas as dependências e ambiente em um único objeto compacto. Isso garante consistência do ambiente em todas as etapas: do desenvolvimento ao teste e produção.
Docker permite empacotar seu projeto ou projetos em um contêiner Docker. É tipo uma máquina virtual.
E embora em qualquer fórum sobre Docker você seja bombardeado se chamar de "máquina virtual", é possível pensar no contêiner do Docker justamente como uma máquina virtual. Só que muito mais leve.
Basicamente, um contêiner Docker é uma "máquina virtual" virtual. Máquinas virtuais incluem uma cópia completa do sistema operacional, kernel do SO e hardware virtual, enquanto contêineres Docker compartilham o kernel do host e podem ser mais leves e rápidos.
Implementar um projeto com Docker simplifica muito o processo, proporcionando rapidez e confiabilidade. O projeto é empacotado em contêineres Docker, que podem ser facilmente movidos e executados em qualquer sistema que suporte Docker.
Isso elimina problemas relacionados a diferenças nos ambientes de servidor e permite facilmente escalar o aplicativo, adicionando ou removendo contêineres de acordo com a carga. Todo mundo mudou para Docker – é muito conveniente e muito simples.
GO TO FULL VERSION