Bugs ressources contexte EzWall
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.
Votre avis
Nobody voted on this yet
|
|
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 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.
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
.
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