12.1 Fazendo alterações no código
Como eu já disse acima, todo o desenvolvimento moderno é sobre fazer pequenas alterações no código. Milhões de programadores fazem isso há décadas, por isso, esse processo já está afinado, padronizado e formalizado de todas as maneiras possíveis.
Primeiro, para armazenar o código tem um programa especial — Git. Git é um sistema de controle de versão distribuído, usado para rastrear mudanças no código e coordenar o trabalho dos programadores em projetos conjuntos.
Git permite que desenvolvedores criem branches no projeto, mantendo todo o histórico de alterações e a possibilidade de voltar para qualquer estado do arquivo. Isso garante um merge eficiente das alterações e resolução de conflitos, fazendo do Git a principal ferramenta para o trabalho colaborativo no código no desenvolvimento moderno de software.
Segundo, o processo de fazer alterações no código também é padronizado. Normalmente, para cada nova feature você cria no Git um novo branch, faz suas alterações nele como uma série de commits e depois manda um Pull Request para o seu líder de time ou colega de equipe, para que ele faça um Code Review e aprove suas alterações.
Se tudo correr bem, suas mudanças são mescladas no branch dev, uma build automática do projeto é iniciada e testes são executados. Muitos testes.
12.2 Construindo o projeto
Antes de testar o projeto ou carregar no servidor, você precisa construir ele.
Build de projetos é o processo de compilar o código-fonte do projeto em programas executáveis ou outros formatos de execução, muitas vezes com inclusão de testes e deploy. Esse é um aspecto chave no desenvolvimento de software, garantindo que o programa esteja pronto para uso.
Build não é compilação, mas a compilação muitas vezes é parte do processo de build. Após finalizar o build, você frequentemente pode ter dezenas ou até centenas de arquivos, que precisam ser enviados para diferentes servidores.
Os builders podem ser de baixo nível:
Maven e Gradle são amplamente usados para gerenciar dependências e builds em projetos Java.
Apache Ant é outra ferramenta de build para projetos Java, oferece grande flexibilidade na escrita de scripts de build.
MSBuild é usado para builds de projetos criados com Microsoft Visual Studio.
Make é uma ferramenta clássica de build, usando Makefile para definir regras de build, especialmente popular em projetos C e C++.
Webpack é frequentemente usado para build de aplicativos JavaScript, gerenciando dependências e módulos.
Gulp e Grunt são ferramentas que ajudam a automatizar tarefas frequentemente realizadas no desenvolvimento de aplicativos web, como minificação de arquivos e compilação de SCSS para CSS.
Os builders podem ser de alto nível também. Falaremos sobre eles abaixo.
12.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 e o teste automático e o deploy dessas mudanças. Isso permite identificar e corrigir erros rapidamente, aumentando a eficiência e a velocidade do desenvolvimento.
Um dos sistemas de CI/CD mais comuns, mesmo que um pouco antiquado, é o Jenkins. Se você trabalha em uma pequena empresa, há 80% de chance de que ele seja usado.
Jenkins é um sistema automatizado popular, usado para integração contínua e entrega (CI/CD). Jenkins permite automatizar várias etapas no desenvolvimento de software, incluindo build, teste e deploy, o que melhora a qualidade do código e acelera o processo de desenvolvimento.
Se você trabalhar numa empresa grande, pode haver mais 5 opções:
TeamCity é um sistema comercial poderoso da JetBrains, oferece integração profunda com diversas ferramentas de desenvolvimento e teste.
GitLab CI é parte integrada do GitLab, oferece integração contínua e entrega com a possibilidade de configuração através de arquivos YAML.
CircleCI é um serviço de CI/CD cloud, oferece automação de teste e deploy para muitos projetos.
Travis CI foi um dos primeiros serviços CI na nuvem, usado em muitos projetos open source, integra-se bem com o GitHub.
Bamboo é um produto da Atlassian, integra-se facilmente com outras ferramentas da empresa, como Jira e Bitbucket.
Você não precisa conhecer ou saber trabalhar com eles: geralmente há um especialista em DevOps na empresa que configura todos esses processos de builds. Você só precisa saber que eles existem e entender sobre o que estão falando quando mencionam Jenkins, CI/CD ou "continuous integration".
12.4 Entregando o projeto no servidor
Não basta escrever o projeto, ele também deve estar no seu servidor. Na verdade, deploy do projeto no servidor é o processo de disponibilizar e ativar um aplicativo web no servidor de forma que esteja acessível para os usuários pela internet.
Isso inclui transferir os arquivos do projeto para o servidor, configurar o ambiente do servidor, bancos de dados, dependências, bem como configurar as definições de rede e segurança.
Como você acha que seu código vai chegar ao servidor? Alguém vai enviá-lo? Ou talvez você conecte por SSH ao servidor remoto, envie alguns arquivos lá e configure tudo? Relaxe: isso ninguém faz mais. Agora temos o Docker.
Docker é uma plataforma para desenvolvimento, entrega e execução de aplicativos via containerização. Docker facilita a criação, deploy e execução de aplicativos usando containers, que permitem empacotar o aplicativo com todo o seu ambiente e dependências em um único objeto compacto, garantindo consistência do ambiente em todas as fases de desenvolvimento, teste e produção.
Docker permite empacotar seu projeto ou projetos em um Docker container. É tipo uma máquina virtual, só que bem mais leve.
E embora em qualquer fórum de Docker, se você chamá-lo de máquina virtual, vão te criticar, mas se você sabe o que é uma máquina virtual, pode pensar no Docker container como uma máquina virtual. Só que bem mais leve.
Basicamente, Docker container é a "máquina virtual" virtual. Máquinas virtuais incluem uma cópia completa do sistema operacional, kernel do SO, e hardware virtual, enquanto os containers Docker compartilham o kernel do host e podem ser mais leves e rápidos.
E o deploy de projeto com Docker simplifica muito o processo de deploy de aplicativos, garantindo rapidez e confiabilidade. O projeto é empacotado em Docker containers, que podem ser facilmente movidos e executados em qualquer sistema que suporte Docker.
Isso elimina problemas relacionados a diferenças nos ambientes do servidor, e permite escalar facilmente o aplicativo, adicionando ou removendo containers conforme a carga. Todo mundo migrou para Docker — é muito prático e muito fácil.
GO TO FULL VERSION