1
resposta

[Dúvida] DB prod não está sendo usado pelo Jenkins

Descrição

Na aula 05, primeiro vídeo "Job em produção", aprendemos a criar um job que sobe a aplicação em ambiente de produção, passando o arquivo .env-prod para o Jenkins. Porém, observando os dados que estavam no banco de dados de desenvolvimento e no de produção, notei que o banco de dados que está sendo utilizado é o de desenvolvimento. Onde errei?

Evidências

Print dos bancos de produção e desenvolvimento, respectivamente

Print dos bancos de produção e desenvolvimento, respectivamenteSequência de comandos utilizada para obter o resultado acima:

mysql -u devops -p #senha: mestre
use todo;
select * from core_todo;
use todo_dev;
select * from core_todo;

Print da aplicação subida pelo Jenkins Print da aplicação subida pelo Jenkins

Prints da configuração do Jenkins:

Parâmetro String DOCKER_HOST Parâmetro String DOCKER_HOST

Parâmetro String Image Parâmetro String Image

Provide Configuration files Provide Configuration files

Slack Notifications Slack Notifications

Execução do shell script:

#!/bin/sh
{ 
docker run -d -p 80:8000 -v /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock -v /var/lib/jenkins/workspace/todo-list-producao/.env:/usr/src/app/to_do/.env --name=django-todolist-prod $image:latest
} || { # catch
docker rm -f django-todolist-prod
docker run -d -p 80:8000 -v /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock -v /var/lib/jenkins/workspace/todo-list-producao/.env:/usr/src/app/to_do/.env --name=django-todolist-prod $image:latest
}

Arquivo .env-prod

[config]
# Secret configuration
SECRET_KEY = 'r*5ltfzw-61ksdm41fuul8+hxs$86yo9%k1%k=(!@=-wv4qtyv'
# conf
DEBUG=True
# Database
DB_NAME = "todo"
DB_USER = "devops"
DB_PASSWORD = "mestre"
DB_HOST = "localhost"
DB_PORT = "3306"

Arquivo .env-dev

[config]
# Secret configuration
SECRET_KEY = 'r*5ltfzw-61ksdm41fuul8+hxs$86yo9%k1%k=(!@=-wv4qtyv'
# conf
DEBUG=True
# Database
DB_NAME = "todo_dev"
DB_USER = "devops_dev"
DB_PASSWORD = "mestre"
DB_HOST = "localhost"
DB_PORT = "3306"
1 resposta

Olá, Otavio.

Tudo bem?

Analisando a sua situação, parece que o problema está relacionado ao arquivo .env que está sendo utilizado quando o Jenkins sobe a aplicação. Vamos verificar alguns pontos que podem estar causando esse comportamento:

  1. Verificação do arquivo .env usado: No script de execução do Jenkins, você mencionou que o arquivo .env é montado no container. É crucial garantir que o arquivo .env-prod esteja sendo corretamente especificado e usado no momento da execução. Você pode adicionar um comando no script para imprimir o conteúdo do arquivo .env usado pelo container para verificar se as configurações estão corretas. Por exemplo:

    cat /usr/src/app/to_do/.env
    

    Adicione esse comando antes da execução do seu aplicativo para confirmar se as variáveis de ambiente estão corretas.

  2. Configuração do banco de dados no .env-prod: Seu arquivo .env-prod parece estar configurado corretamente para apontar para o banco de dados de produção (todo). No entanto, é importante verificar se não há outro local no seu projeto que possa estar sobrescrevendo essas configurações quando a aplicação é iniciada.

  3. Cache ou dados residuais: Às vezes, configurações anteriores podem ser armazenadas em cache ou o container pode não estar sendo atualizado como esperado. Tente remover completamente os containers e as imagens e reconstruí-los para garantir que não haja dados residuais afetando a configuração.

  4. Volumes Docker: Verifique se os volumes montados não estão causando conflito ou sobrescrevendo as configurações desejadas. No seu script, você monta o volume para o socket do MySQL e para o arquivo .env. Certifique-se de que não há outros volumes que possam estar interferindo.

  5. Logs de execução: Verifique os logs de execução do Jenkins e do Docker para qualquer mensagem que possa indicar um erro na seleção do arquivo de configuração ou na conexão com o banco de dados.

Corrigindo esses pontos, você deve ser capaz de garantir que o ambiente de produção esteja utilizando o banco de dados correto. Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.