monolito_djanco_poonto/makefile

102 lines
3.9 KiB
Makefile

# Variáveis de ambiente
DOCKER_IMAGE=front-face-recognition
DOCKER_IMAGE_DLIB=dlib-build-image
DOCKER_TAG=latest
LATEST_TAG=latest
AWS_REGION=us-east-2
# Verificação de quem é o usuário e carregamento das variáveis
WHOAMI=$(shell whoami)
ifeq ($(WHOAMI),gitlab-runner)
AWS_ACCESS_KEY_ID ?= $(AWS_ACCESS_KEY_ID)
AWS_SECRET_ACCESS_KEY ?= $(AWS_SECRET_ACCESS_KEY)
DOCKER_REGISTRY ?= $(shell echo 794038208959.dkr.ecr.$(AWS_REGION).amazonaws.com)
else ifeq ($(WHOAMI),verde001)
AWS_ACCESS_KEY_ID=$(shell awk '/aws_access_key_id/ { print $$3 }' ~/.aws/credentials)
AWS_SECRET_ACCESS_KEY=$(shell awk '/aws_secret_access_key/ { print $$3 }' ~/.aws/credentials)
AWS_PROFILE=$(shell awk '/profile/ { print $$2 }' ~/.aws/config)
DOCKER_REGISTRY ?= $(shell echo 794038208959.dkr.ecr.$(AWS_REGION).amazonaws.com)
endif
.PHONY: all build login-aws pull-latest push publish deploy run stop logs clean format check help
# Alvo principal que executa todas as etapas
all: build login-aws pull-latest push
# Nome da imagem do Docker
IMAGE_NAME= front-face-recognition
PUBLIC_IP = 18.119.123.240
# Login no AWS ECR
login-aws: ## Faz o login no AWS ECR
@echo "Logando no AWS ECR"
aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(DOCKER_REGISTRY)
# Constrói a imagem Docker
build: ## Constrói a imagem Docker
docker build -t $(DOCKER_IMAGE):$(LATEST_TAG) .
build-dlib: ## Constrói a imagem Docker
docker build -t $(DOCKER_IMAGE_DLIB):$(LATEST_TAG) Dockerfile-dlib
# Puxa a imagem mais recente (latest) do repositório
pull-latest: ## Puxa a imagem mais recente (latest) do repositório
@echo "Puxando a imagem mais recente (latest)"
docker pull $(DOCKER_REGISTRY)/$(DOCKER_IMAGE):$(LATEST_TAG) || true
# Publica a imagem no Docker Registry (com o SHA do commit e latest)
publish: ## Publica a imagem no Docker Registry
@echo "Tagueando e enviando as imagens"
# Tag também como latest
docker tag $(DOCKER_IMAGE):$(LATEST_TAG) $(DOCKER_REGISTRY)/$(DOCKER_IMAGE):$(LATEST_TAG)
docker push $(DOCKER_REGISTRY)/$(DOCKER_IMAGE):$(LATEST_TAG)
# Deploy para o EKS
deploy: ## Realiza o deploy no EC2
@echo "Deploy para o EC2 em andamento..."
ansible-playbook -i infraestrutura/hosts infraestrutura/deploy.yml
deploy-ci: ## Realiza o deploy no EC2
@echo "Deploy para o EC2 em andamento..."
ansible-playbook -i infraestrutura/hosts-ci infraestrutura/deploy.yml
db: ## Realiza o deploy do Redis e MinIO
@echo "Deploy do Redis e MinIO em andamento..."
ansible-playbook -i infraestrutura/hosts infraestrutura/database.yml
ssh: ## SSH ACESSAR
chmod 400 cred/vm_dev_key.pem
ssh -i cred/vm_dev_key.pem ubuntu@$(PUBLIC_IP)
# Executa o contêiner Docker em segundo plano
run: ## Executa o contêiner Docker em segundo plano
docker run -d -p 5001:5001 --restart always --name $(IMAGE_NAME)_container $(DOCKER_IMAGE):$(LATEST_TAG)
# Mostra os logs do contêiner em execução
logs: ## Exibe os logs do contêiner em execução
docker logs -f $(IMAGE_NAME)_container
# Para e remove o contêiner Docker
stop: ## Para e remove o contêiner Docker
docker stop $(IMAGE_NAME)_container || true
docker rm $(IMAGE_NAME)_container || true
# Limpa as imagens e contêineres Docker
clean: ## Limpa as imagens e contêineres Docker
make stop
docker rmi $(DOCKER_IMAGE):$(DOCKER_TAG) || true
# Formata o código na pasta src usando black
format: ## Formata o código na pasta src usando black
black src
# Roda os testes de sistema com unittest
check: ## Roda os testes de sistema usando unittest
python -m unittest discover -s tests -p "teste_unitario.py"
# Exibe a mensagem de ajuda
help: ## Exibe esta mensagem de ajuda
@echo "Escolha um alvo para executar:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'