Skip to main content

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