Makefile 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # RegBrowser - tareas de construcción y despliegue en Kubernetes
  2. #
  3. # Uso: make -C k8s <objetivo>
  4. # Ej.: make -C k8s deploy
  5. IMAGE := harbor.reymota.es/reymota/regbrowser:latest
  6. NAMESPACE := regbrowser
  7. DEPLOY := regbrowser
  8. .DEFAULT_GOAL := help
  9. .PHONY: help build push deploy robot-secret db-secret restart status logs uninstall purge purge
  10. help: ## Muestra esta ayuda
  11. @grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \
  12. awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}'
  13. build: ## Construye la imagen Docker desde la raíz del proyecto
  14. docker build -t $(IMAGE) ..
  15. push: build ## Sube la imagen a Harbor
  16. docker push $(IMAGE)
  17. robot-secret: ## Crea/renueva el pull secret del robot account. Uso: make -C k8s robot-secret TOKEN='<token>'
  18. @test -n "$(TOKEN)" || { echo "Error: falta TOKEN. Uso: make -C k8s robot-secret TOKEN='<token>'"; exit 1; }
  19. kubectl create secret docker-registry myregistrykey \
  20. --docker-server=harbor.reymota.es \
  21. --docker-username='robot$$reymota+regbrowser-pull' \
  22. --docker-password='$(TOKEN)' \
  23. -n $(NAMESPACE) --dry-run=client -o yaml | kubectl apply -f -
  24. kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
  25. kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
  26. db-secret: ## Crea/renueva el secret de conexión a Postgres (copia credenciales de reymota-pg-cluster)
  27. kubectl get secret postgres-app-user -n reymota-pg-cluster -o json | \
  28. python3 -c "import json,sys; d=json.load(sys.stdin); print(json.dumps({'apiVersion':'v1','kind':'Secret','metadata':{'name':'regbrowser-db','namespace':'$(NAMESPACE)'},'type':'Opaque','data':{k:d['data'][k] for k in ('username','password')}}))" | \
  29. kubectl apply -f -
  30. deploy: ## Aplica los manifiestos y espera a que esté disponible
  31. kubectl apply -f namespace.yaml
  32. @if ! kubectl get secret myregistrykey -n $(NAMESPACE) >/dev/null 2>&1; then \
  33. echo ">> Falta el pull secret; créalo con: make -C k8s robot-secret TOKEN='<token>'"; \
  34. exit 1; \
  35. fi
  36. @if ! kubectl get secret regbrowser-db -n $(NAMESPACE) >/dev/null 2>&1; then \
  37. echo ">> Falta el secret de BD; ejecutando 'make db-secret'..."; \
  38. $(MAKE) --no-print-directory db-secret; \
  39. fi
  40. kubectl apply -f secrets.yaml -f deployment.yaml -f service-ingress.yaml
  41. kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
  42. restart: ## Reinicia el deployment (para hacer pull de la última imagen)
  43. kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
  44. kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
  45. status: ## Estado de pods, service, ingress y pvc
  46. kubectl get pods,svc,ingress,pvc -n $(NAMESPACE)
  47. logs: ## Sigue los logs del pod
  48. kubectl logs -f deploy/$(DEPLOY) -n $(NAMESPACE)
  49. uninstall: ## Elimina la app (deployment, service, ingress, secrets) conservando namespace y BD
  50. kubectl delete deployment/$(DEPLOY) service/regbrowser ingress/regbrowser \
  51. secret/myregistrykey secret/regbrowser-secrets \
  52. -n $(NAMESPACE) --ignore-not-found
  53. purge: ## Elimina TODO incluida la BD (borra el namespace completo). ¡La BD se pierde!
  54. kubectl delete namespace $(NAMESPACE) --ignore-not-found