1. Fazendo alterações no código
Como já mencionei antes, o desenvolvimento de software se resume a fazer pequenas alterações no código. Esse processo é realizado por milhões de programadores ao longo de décadas, o que levou ao seu cuidadoso refinamento, padronização e formalização de todas as maneiras possíveis.
Para armazenar código existe um programa específico — Git. Git é um sistema de controle de versão distribuído. Ele não apenas guarda o código, mas rastreia todas as mudanças nele e ajuda os programadores a trabalharem juntos no mesmo projeto sem atrapalhar uns aos outros 🤝.
Com o Git, desenvolvedores podem criar diferentes versões do projeto (branches), manter o histórico completo de alterações e até voltar a qualquer ponto no passado. É como uma máquina do tempo para o código! O Git ajuda a mesclar mudanças e resolver conflitos, por isso se tornou a principal ferramenta de trabalho em equipe no desenvolvimento moderno. 👩💻
2. Construindo o projeto
Antes de testar o projeto ou enviá-lo para o servidor, é preciso fazer o build.
🏗️ Build de projetos é o processo de compilar o código-fonte em programas executáveis ou outros formatos executáveis, muitas vezes incluindo testes e deployment. É um aspecto fundamental do desenvolvimento de software, garantindo que o programa esteja pronto para uso.
Build não é apenas compilação, embora a compilação normalmente faça parte do processo. Ao final do build, você pode ter dezenas ou até centenas de arquivos que precisam ser enviados para diferentes servidores.
As ferramentas de build podem ser de baixo nível, como:
- ☕ Maven e Gradle — amplamente usados em projetos Java para gerenciar dependências e realizar o build.
- 🐜 Apache Ant — outra ferramenta para build de projetos Java, oferece grande flexibilidade na escrita de scripts de build.
- 🖥️ MSBuild — usado para construir projetos criados com o Microsoft Visual Studio.
- ⚙️ Make — ferramenta clássica de build que usa Makefile para definir regras, especialmente popular em projetos C e C++.
- 🌐 Webpack — comumente usado para build de aplicações JavaScript, gerenciando dependências e módulos.
- 📜 Gulp e Grunt — ferramentas que ajudam a automatizar tarefas frequentes no desenvolvimento web, como minificação de arquivos e compilação de SCSS para CSS.
Há também ferramentas de build de alto nível. Falaremos delas mais adiante.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) é uma metodologia que pressupõe a integração contínua das mudanças de todas as branches de desenvolvimento na branch principal, além de testes e deployment automáticos dessas mudanças. Isso permite identificar e corrigir erros rapidamente, aumentando a eficiência e a velocidade do desenvolvimento.
Uma das soluções de CI/CD mais difundidas, embora um pouco datada, é o Jenkins. Se você trabalha em uma empresa pequena, há uma probabilidade de 80 % de usarem justamente ele.
🤖 Jenkins é uma plataforma popular de automação usada para integração e entrega contínuas (CI/CD). O Jenkins permite automatizar várias etapas do desenvolvimento de software, incluindo build, teste e deployment, o que melhora a qualidade do código e acelera o processo de desenvolvimento.
Se você entrar em uma empresa grande, pode haver outras 5 opções:
- 🚦 TeamCity — uma poderosa solução comercial da JetBrains. Oferece integração profunda com diversos ambientes de desenvolvimento e teste.
- 📝 GitLab CI — parte integrada do GitLab, fornece integração e entrega contínuas com configuração por meio de arquivos YAML.
- ☁️ CircleCI — serviço de CI/CD na nuvem que suporta automação de testes e deployment para inúmeros projetos.
- 🦑 Travis CI — um dos primeiros serviços de CI em nuvem, usado em muitos projetos open source. Integra-se bem com o GitHub.
- 🎍 Bamboo — produto da Atlassian, integra-se estreitamente com outras ferramentas da empresa, como Jira e Bitbucket.
Você não precisa conhecer todos nem saber usá-los — normalmente há especialistas de DevOps na empresa que configuram todos esses processos. Você só precisa saber que eles existem e entender do que se fala quando, em uma conversa, mencionam Jenkins, CI/CD ou “continuous integration”.
4. Enviando o projeto para o servidor
Não basta escrever o projeto — ele ainda precisa parar no seu servidor. Em geral, a implantação (deploy) de um projeto no servidor é o processo de colocar e ativar o aplicativo web no servidor de modo que fique acessível aos usuários pela internet 🚚.
Esse processo inclui transferir os arquivos do projeto para o servidor, configurar o ambiente do servidor, bancos de dados, dependências, bem como as configurações de rede e segurança 😅.
E como você acha que seu código chega ao servidor? Alguém vai subir tudo manualmente? Ou talvez você vá se conectar por SSH ao servidor remoto, enviar alguns arquivos e configurar tudo? Relaxe: assim ninguém mais faz. Agora existe Docker.
🐳 Docker é uma plataforma para desenvolver, entregar e executar aplicações usando containers. O Docker simplifica a criação, o deployment e a execução de aplicativos, empacotando-os junto com todas as dependências e o ambiente em um único artefato compacto. Isso garante a consistência do ambiente em todas as etapas: do desenvolvimento aos testes e à produção.
O Docker permite empacotar seu projeto (ou projetos) em um container Docker. É algo parecido com uma máquina virtual.
Embora em qualquer fórum sobre Docker possam reclamar se você chamá-lo de “máquina virtual”, você pode pensar no container do Docker exatamente como uma máquina virtual — só que muito mais leve.
Em essência, um container Docker é uma “máquina virtual”. Máquinas virtuais incluem uma cópia completa do sistema operacional, o kernel do SO e hardware virtualizado, enquanto containers Docker compartilham o kernel do host e podem ser mais leves e rápidos ⚡.
Fazer o deploy do projeto com Docker simplifica bastante o processo, garantindo rapidez e confiabilidade. O projeto é empacotado em containers Docker, que podem ser facilmente movidos e executados em qualquer sistema que suporte Docker 🚢.
Isso elimina problemas relacionados a diferenças entre ambientes de servidor e permite escalar o aplicativo com facilidade, adicionando ou removendo containers conforme a carga. Todo mundo migrou para Docker — é muito prático e muito simples.
GO TO FULL VERSION