Bugs ressources contexte EzWall

De EjnTricks
Révision de 22 août 2018 à 12:12 par Etienne (discussion | contributions) (Page créée avec « Lors d'un déployement de <code>Jenkins</code> avec un contexte racine, le plugin <code>EzWall</code> en version <code>0.3</code> n'affiche aucune information. Cet articl... »)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Lors d'un déployement de Jenkins avec un contexte racine, le plugin EzWall en version 0.3 n'affiche aucune information.

Cet article présente l'analyse du bug ainsi que deux solutions.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Lors de la construction de la page, des accès sont réalisées sur les resources CSS et Javascript dans la page principale resources/jenkins/plugins/ezwall/EzWallViewAction/index.jelly dans la balise head.

  <head>
    <meta charset="utf-8"/>
    <title>EZWall</title>
    <link rel="stylesheet" type="text/css" href="${rootURL}/plugin/ezwall/css/Aristo/Aristo.css" />
    <link rel="stylesheet" type="text/css" href="${rootURL}/plugin/ezwall/css/ezwall.css" />  
    <script type="text/javascript"
    	src="${rootURL}/plugin/ezwall/js/require.js"
    	data-main="${rootURL}/plugin/ezwall/js/main">
    </script>
  </head>

Il se trouve que la valeur de rootURL n'est pas remplacée par la valeur attendue. Cela s'explique par le fait que la page n'est pas contenu dans un layout, et n'est donc pas disponible.

Ainsi, pour un déployement sous http://www.jenkins.dummy.net/jenkins, les resources seront chargées depuis les URLS du type http://www.jenkins.dummy.net/plugin/ezwall/... au lieu de http://www.jenkins.dummy.net/jenkins/plugin/ezwall/....


De plus, la page est totalement indépendante, il est donc nécessaire d'intialiser le contexte, comme cela est réalisé dans le plugin Build Monitor View.


Configuration-icon.png Configuration Apache

Dans le cas où Jenkins est exposé à travers un serveur Apache, il est possible de mettre en place des instructions ProxyPass comme l'exemple ci dessous.

    ProxyPass /plugin http://localhost:8080/jenkins/plugin nocanon
    ProxyPassReverse /plugin http://localhost:8080/jenkins/plugin

Cependant, ceci ne fait que masquer le problème.


Update icon.png Correctif

Afin de corriger le problème, il est nécessaire de réaliser un fork du projet initial.

L'objectif étant de pouvoir initialiser les variables de contexte et de pouvoir utiliser rootURL. Pour cela, il suffit de charger la classe hudson.Functions et d'exécuter la fonction initPageVariables. Ainsi, la variable rootURL, mais également resURL, sont disponibles.

D'après les recommandations faite par Jenkins, il est préférable d'utiliser resURL. Une variable est donc initialiser pour spécifier la racine des accès aux resources avec la valeur ${resURL}/plugin/ezwall.

Le fichier modifié devient alors le suivant.

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:x="jelly:xml">
<st:contentType value="text/html;charset=UTF-8" />

<j:new var="h" className="hudson.Functions"/>
${h.initPageVariables(context)}

<j:set var="resourcesURL" value="${resURL}/plugin/ezwall" />
<x:doctype name="html" />
<html>

  <head>
    <meta charset="utf-8"/>
    <title>EZWall</title>
    <link rel="stylesheet" type="text/css" href="${resourcesURL}/css/Aristo/Aristo.css" />
    <link rel="stylesheet" type="text/css" href="${resourcesURL}/css/ezwall.css" />  
    <script type="text/javascript"
    	src="${resourcesURL}/js/require.js"
    	data-main="${resourcesURL}/js/main">
    </script>
  </head>

  <body>
    <div id="ezwall-container">
      <div id="dashboard"></div>
      <div id="header-display-zone"></div>
      <header id="header" class="header"></header>
    </div>
  </body>

</html>
</j:jelly>

Une fois le fichier modifié, il faut recompiler le plugin avec les commandes maven mvn package et plaer le fichier hpi généré dans le répertoire de plugins de Jenkins.


Viewer icon.png Voir Aussi

Inspiration: https://github.com/jan-molak/jenkins-build-monitor-plugin/tree/master/build-monitor-plugin

Pull Request sur dépot officiel: https://github.com/jenkinsci/ezwall-plugin/pull/4