From 85918a948e21174a8bc736a0fb6883a31baba885 Mon Sep 17 00:00:00 2001 From: Luis Eduardo Alencar Melo <102627134+luiseduardoalencar@users.noreply.github.com> Date: Tue, 26 Nov 2024 09:24:38 -0300 Subject: [PATCH] Update README.md --- README.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c6955bf..19172c2 100644 --- a/README.md +++ b/README.md @@ -105,5 +105,89 @@ Execute a análise do código com o comando: ```bash ./mvnw sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login= ``` - --- + +## Integração e Deploy Contínuos (CI/CD) com GitHub Actions + +A aplicação conta com um workflow automatizado de build e deploy utilizando o **GitHub Actions**, configurado no arquivo `.github/workflows/prod.yml`. Esse arquivo define um pipeline que executa os seguintes passos ao realizar um push para o branch `main`: + +#### Estrutura do Workflow + +1. **Eventos Disparadores** + - O workflow é executado automaticamente toda vez que há um `push` para o branch `main`. + +2. **Jobs Definidos** + - O workflow possui dois jobs principais: `build` e `deploy`. + +#### Job: Build + +O job `build` é responsável por compilar a aplicação e preparar a imagem Docker. Ele utiliza a máquina virtual do GitHub para executar os seguintes passos: + +- **Checkout do Código** + - Obtém o código da aplicação do repositório. + +- **Configuração do Ambiente Java** + - Configura o ambiente com Java 17, utilizando o Temurin como distribuição. + +- **Compilação da Aplicação** + - Realiza o build da aplicação com o Maven, garantindo que a aplicação está pronta para ser empacotada. + +- **Autenticação no Docker Hub** + - Faz login no Docker Hub utilizando credenciais armazenadas como secrets no repositório. + +- **Build da Imagem Docker** + - Constrói a imagem Docker da aplicação, com a tag correspondente ao repositório no Docker Hub. + +- **Publicação da Imagem** + - Envia a imagem construída para o Docker Hub. + +#### Job: Deploy + +O job `deploy` depende do `build` para ser executado. Ele realiza o deploy da aplicação utilizando um runner self-hosted (um servidor próprio configurado para rodar ações do GitHub). Os passos executados são: + +- **Download da Imagem Docker** + - Faz o pull da imagem mais recente da aplicação a partir do Docker Hub. + +- **Remoção do Container Anterior** + - Remove o container existente para garantir que não há conflitos. + +- **Início do Novo Container** + - Inicia um novo container da aplicação, configurando as variáveis de ambiente para conexão com o banco de dados. + +#### Variáveis de Ambiente + +O workflow utiliza secrets do GitHub para armazenar informações sensíveis, como: +- `DOCKER_USERNAME` e `DOCKER_PASSWORD` (credenciais do Docker Hub) +- `DATABASE_URL`, `DATABASE_USERNAME` e `DATABASE_PASSWORD` (informações do banco de dados) + +Essas variáveis são injetadas no ambiente durante o build e deploy, garantindo segurança e flexibilidade. + +#### Benefícios + +1. **Automação Total** + - Ao realizar um `git push` para o branch `main`, o pipeline cuida de todo o processo de build e deploy automaticamente. + +2. **Confiabilidade** + - Cada etapa do workflow é isolada e validada, minimizando erros manuais durante o deploy. + +3. **Escalabilidade** + - A utilização do Docker garante que a aplicação seja executada de forma consistente em qualquer ambiente. + +4. **Segurança** + - Secrets armazenados no repositório GitHub garantem que informações sensíveis não sejam expostas. + +#### Como Usar + +1. Faça commit e push das alterações para o branch `main`: + ```bash + git add . + git commit -m "Descrição do commit" + git push origin main + ``` + +2. O pipeline será disparado automaticamente, e você poderá acompanhar a execução no GitHub Actions. + +3. Após a conclusão, a aplicação estará disponível no ambiente configurado. + +Com essa abordagem, você garante agilidade no desenvolvimento, reduzindo o tempo necessário para colocar mudanças em produção! +