Saltar al contenido principal

Job

Para proceder con las migraciones de base de datos despues del despliegue, se crea un job en kubernetes que realiza las ejecuciones pertinentes dentro del pod de la aplicacion

El job es el siguiente:

warning

Para que el Job pueda ejecutar comandos dentro del pod debe tener un RoleBinding asociado a la service account del proyecto de argoCD. Debe ser algo como lo siguiente dependendiendo del namespace donde se quiera colocar:

kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=osdo:default -n osdo

Esto hara que la service account pueda acceder al pod y ejecutar los comandos del job


apiVersion: batch/v1
kind: Job
metadata:
name: osdoapp-post-hook-job
namespace: osdo
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
template:
spec:
containers:
- name: kubectl-container
image: bitnami/kubectl:latest # Imagen de kubectl
command:
- "/bin/sh"
- "-c"
args:
- |
pods=$(kubectl get pods -n osdo -o=name)
pod_name=$(echo "$pods" | grep "osdoapp-deployment" | head -n 1 | cut -d'/' -f 2)
if [ ! -z "$pod_name" ]; then
kubectl exec -n osdo $pod_name -- php artisan migrate --force
kubectl exec -n osdo $pod_name -- php artisan db:seed --force
else
echo "No se encontr贸 el pod deseado."
fi
restartPolicy: Never
backoffLimit: 2 # N煤mero de veces que se intentar谩 ejecutar el job en caso de fallo