\section{Parte pr\'actica}

\begin{frame}
\frametitle{\textbf{Lo siento, os toca trabajar ahora}}
\begin{itemize}
    \item Vamos a intentar compilar manualmente el proyecto y a levantarlo
    \item Para ello debería ser tan sencillo como leerse el README
    \item Una vez lo levantemos, intentemos automatizarlo para no perder el tiempo en despliegues
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{\textbf{CI: qu\'e hace Jenkinsfile.ci?}}
\begin{itemize}
    \item Stage \textbf{Init}: lee autor y hash corto del commit.
    \item Stage \textbf{Backend: lint \& test}:
    \begin{itemize}
        \item usa contenedor \texttt{python:3.11-slim}
        \item crea venv, instala dev deps
        \item ejecuta \texttt{ruff} y \texttt{pytest}
    \end{itemize}
    \item Stage \textbf{Frontend: check \& build}:
    \begin{itemize}
        \item usa contenedor \texttt{node:20-slim}
        \item \texttt{npm install} + \texttt{npm run check} + \texttt{npm test} + \texttt{npm run build}
    \end{itemize}
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{\textbf{CD: qu\'e hace Jenkinsfile.cd?}}
\begin{itemize}
    \item Construye im\'agenes Docker con tags tipo \texttt{1.0.\$BUILD\_NUMBER}.
    \item Inyecta metadatos en runtime:
    \begin{itemize}
        \item \texttt{APP\_VERSION}, \texttt{GIT\_COMMIT}, \texttt{COMMIT\_AUTHOR}, \texttt{BUILD\_NUMBER}
    \end{itemize}
    \item Despliega con \texttt{docker compose up -d} usando \texttt{BACKEND\_TAG} y \texttt{FRONTEND\_TAG}.
\end{itemize}

\vspace{0.1in}
\begin{mybox}
\begin{itemize}
    \item[\ding{229}] El rollback es sencillo: si tienes tags, puedes redeployar una versi\'on anterior en segundos. CD genera artefactos (imágenes versionadas) y en nuestro caso, se ocupa del deploy también.
\end{itemize}
\end{mybox}
\end{frame}
