\RequirePackage{pdf14}
\documentclass{beamer}
\usepackage[frenchb]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pgfpages}
\usepackage{listings}
\usepackage{graphicx}
\usetheme{Dresden}
\useoutertheme[footline=authorinstitutetitle]{miniframes}
\usecolortheme{whale}
\setbeameroption{show notes on second screen=left}
\setbeamercolor{titlelike}{parent=structure}

\title{Test automatique de la plate-forme Grid'5000}
\author{Arthur Garnier}\institute{INRIA - AlGorille - Grid'5000}
\date{June 12, 2015}
\begin{document}

\begin{frame}
  \titlepage
  \begin{center}
  \includegraphics[width=2cm]{ressources/tn.jpg} \;
  \includegraphics[width=3cm]{ressources/INRIA.png} \;
  \includegraphics[width=2cm]{ressources/UL.jpg}
  \end{center}
\end{frame}

\begin{frame}
  \tableofcontents
\end{frame}

\section{Contexte}

\begin{frame}
  \frametitle{Contexte}
  \begin{itemize}[<+-| alert@+>]
  \item Centre de recherche
    \note[item]{Peu de contrainte : Ruby + Jenkins}
  \item Grid'5000
    \begin{itemize}
    \item Expérimentation à échelle réelle
    \item 1000 noeuds $\rightarrow$ 1900+ CPUs pour 9000+ c\oe urs
    \item P2P, Cloud, HPC
    \item Réservation, VLAN, déploiements
    \end{itemize}
  \end{itemize}
\end{frame}

\section{Description du problème}

\begin{frame}
  \frametitle{Description du problème}
  \begin{itemize}[<+-| alert@+>]
  \item Plusieurs sites
    \note[item]{Grenoble, Lille, Nancy, Lyon, Nantes, Rennes, Sophia-Antipolis, Toulouse}
  \item Nombreux services
    \note[item]{Conso energétique, VLAN, Déploiement, ...}
  \item Pannes matérielles et logicielles régulières
  \item Contrainte d'homogénéité
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Description du problème}
  \framesubtitle{Solutions en place}
  \begin{itemize}[<+-| alert@+>]
  \item Nagios
    \begin{itemize}
    \item \textcolor{green}{Test de l'état des service}
    \item \textcolor{green}{Remontée rapide de la défaillance}
    \item \textcolor{red}{Pas de test des commandes}
    \end{itemize}
  \item Bugzilla
    \begin{itemize}
    \item \textcolor{green}{Report des bugs détectés}
    \item \textcolor{red}{Bug rencontré par l'utilisateur}
      \note[item]{Genant si un utilisateur nouveau...}
    \end{itemize}
  \end{itemize}
\end{frame}

\section{Travail réalisé}

\begin{frame}
  \frametitle{Travail réalisé}
  \begin{enumerate}[<+-| alert@+>]
  \item Automatisation de l'exécution des TP
    \note[item]{Large couverture + protège les new users}
  \item Exécution automatique via Jenkins
  \item Génération automatique de la configuration Jenkins
  \item Interface web simplifiée pour consulter les résultats des tests
  \end{enumerate}
\end{frame}

\subsection*{Automatisation de l'exécution des TP}

\begin{frame}
  \frametitle{Automatisation de l'exécution des TP}
  \begin{itemize}[<+-| alert@+>]
  \item Bibliothèque d'action
  \item \og Codage \fg{} des scripts
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Automatisation de l'exécution des TP}
  \includegraphics[width=10cm]{ressources/wiki_TP.png}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Automatisation de l'exécution des TP}
\begin{lstlisting}[frame=single, language=Ruby, basicstyle=\tiny, numbers=left, breaklines=true]
 tp = Tp.new(name)
 job_id, nodes = tp.sub(site, "-I -t deploy -l {type='kavlan'}/vlan=1+nodes=3,walltime=01:40:00")
 kavlan_id = tp.exec("frontend.#{site}.grid5000.fr", user,  "kavlan -V -j #{job_id}")[:stdout].strip
 tp.exec("frontend.#{site}.grid5000.fr", user, "kavlan -e -j #{job_id}")
 tp.deploy("ubuntu-x64-1204", kavlan_id)
#...
\end{lstlisting}
\end{frame}

\subsection*{Exécution automatique via Jenkins}

\begin{frame}
   \frametitle{Exécution automatique via Jenkins}
   \framesubtitle{Jenkins ?}
   \begin{itemize}[<alert@+>]
   \item Plate-forme d'intégration continue
     \note[item]{Pourquoi Jenkins ? Déjà utilisé pour des tests unitaires}
   \item OpenSource
   \item Très modulable
   \item Vue d'ensemble rapide
   \item<+-| alert@+>  \includegraphics[width=10cm]{ressources/jenkins.png}
   \item<+-| alert@+> \textcolor{orange}{Mais laborieux à utiliser}
   \end{itemize}
\end{frame}

\subsubsection*{Gestion des builds instables avec TextFinder}

\begin{frame}
  \frametitle{Exécution automatique via Jenkins}
  \framesubtitle{Gestion des builds instables avec TextFinder}
  \begin{itemize}[<alert@+>]
  \item \og Reservation Timed Out \fg{} =  Faux positif
  \item Détection par \emph{regex}
  \item \'Etat instable
  \item <+-| alert@+> \textcolor{orange}{Cet état n'est pas exploitable}
  \end{itemize}
\end{frame}

\subsubsection*{Relancer les builds instables}

\begin{frame}
  \frametitle{Exécution automatique via Jenkins}
  \framesubtitle{Relancer les builds instables}
  \begin{itemize}[<alert@+>]
  \item Plugin Naginator
  \item Alternative ?
    \note[item]{Autre outil, script}
  \item Modification du code
    \note[item]{Licence MIT}
  \end{itemize}
\end{frame}

\subsection*{Génération automatique de la configuration Jenkins}

\begin{frame}
  \frametitle{Génération automatique de la configuration Jenkins}
  \begin{itemize}[<alert@+>]
  \item Modification de la structure de la plate-forme
    \note[item]{Obligation de modifier à la main dans jenkins}
  \item Puppet
  \item Jenkins Job Builder
    \begin{itemize}
      \item Fichier YAML
      \item Lisible
      \item Facilement \og Parsable \fg{}
    \end{itemize}
  \item <+-| alert@+> \textcolor{orange}{Tous les plugins ne sont pas gérés}
  \item <+-| alert@+> \textcolor{orange}{Fichier statique}
  \end{itemize}
\end{frame}

\subsubsection*{Extension des possibilités de Jenkins Job Builder avec PostScriptJJB}

\begin{frame}
  \frametitle{Génération automatique de la configuration Jenkins}
  \framesubtitle{Extension des possibilités de Jenkins Job Builder avec PostScriptJJB}
  \begin{itemize}[<alert@+>]
  \item Configuration interne à Jenkins : XML
  \item Créer un parser XML
    \note[item]{Commande simple : Fichier + xPath + texte à importer}
  \item Modification des fichiers XML
  \item Prévenir Jenkins de la modification avec son API
  \item<+-| alert@+> \fbox{\fbox{YAML} $\Rightarrow$ JJB $\Rightarrow$ \fbox{XML} $\Rightarrow$ PostScriptJJB $\Rightarrow$ \fbox{Final XML}}
  \end{itemize}
\end{frame}

\subsubsection*{Mise à jour automatique du fichier YAML avec AutoUpdateJJB}

\begin{frame}
  \frametitle{Génération automatique de la configuration Jenkins}
  \framesubtitle{Mise à jour automatique du fichier YAML avec AutoUpdateJJB}
  \begin{itemize}[<alert@+>]
  \item Mise à jour des configurations des jobs
  \item Basé sur l'API
  \item Parser YAML
  \end{itemize}
\end{frame}

\subsection*{Interface web simplifiée pour consulter les résultats des tests}

\begin{frame}
  \frametitle{Interface web simplifiée pour consulter les résultats des tests}
  \begin{itemize}[<alert@+>]
  \item Réduction du nombre de clic dans Jenkins
  \item Meilleure lisibilité
  \item Résumé des sorties console
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Interface web simplifiée pour consulter les résultats des tests}
  \includegraphics[width=10cm]{ressources/jenkins_summary.png}
\end{frame}

\section{Conclusion}

\begin{frame}
  \frametitle{Conclusion}
  \begin{itemize}[<alert@+>]
  \item Large couverture des possibilités
  \item Réduction des intéractions
  \item Plusieurs bugs détectés
  \end{itemize}
\end{frame}

\begin{frame}
\begin{center}  \Huge{Question time} \end{center}
\end{frame}


\end{document}
