Jenkins - HTML Publisher Plugin - Aucun CSS n'est affiché lorsque le rapport est affiché dans Jenkins Server

92

J'ai un problème étrange avec le plugin Jenkins HTML Publisher, dans lequel tout le CSS sophistiqué que j'ai ajouté au rapport est supprimé lorsqu'il est visualisé dans Jenkins. Si je télécharge le rapport en local, je peux voir le formatage CSS. Y a-t-il un paramètre dans Jenkins qui permet d'afficher CSS?

Mes paramètres d'éditeur HTML dans Jenkins:

entrez la description de l'image ici

Ma page de rapport lorsqu'elle est affichée dans Jenkins:

entrez la description de l'image ici

Ma page de rapport lorsqu'elle est affichée en local:

entrez la description de l'image ici

Vall
la source
Copie
Dave Bacher
2
Tout le monde dit que vous «corrigez» le problème en désactivant la politique de sécurité du contenu, sans vous demander pourquoi elle est là en premier lieu. Quiconque peut affecter les modifications à générer pourra détourner les informations d'identification de l'administrateur et accéder à l'ensemble du cluster Jenkins. Alors que le CSS en ligne est généralement sûr si vous faites attention, autoriser les scripts est un désastre.
OrangeDog

Réponses:

174

J'ai compris le problème. Partage-le ici pour d'autres utilisateurs.

CSS est supprimé en raison de la politique de sécurité du contenu de Jenkins. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

La règle par défaut est définie sur:

sandbox; default-src 'none'; img-src 'self'; style-src 'self';

Cet ensemble de règles donne les résultats suivants:

  • Aucun JavaScript autorisé du tout
  • Aucun plug-in (objet / intégration) autorisé
  • Aucun CSS en ligne ou CSS d'autres sites n'est autorisé
  • Aucune image d'autres sites n'est autorisée
  • Aucun cadre autorisé
  • Aucune police Web autorisée
  • Aucun XHR / AJAX autorisé, etc.

Pour assouplir cette règle, accédez à

  1. Gérer Jenkins->
  2. Gérer les nœuds->
  3. Cliquez sur paramètres (icône d'engrenage) ->
  4. cliquez sur Console de script à gauche et saisissez la commande suivante:

    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

et appuyez sur Exécuter. Si vous voyez la sortie comme «Résultat:» sous l'en-tête «Résultat», la protection est désactivée. Relancez votre build et vous pouvez voir que les nouveaux fichiers HTML archivés auront le CSS activé.

Vall
la source
1
Merci!!! Cela m'a vraiment aidé à résoudre ce problème css que j'avais avec jenkins.
Eyal Sooliman le
1
@Steerpike Je me suis demandé ce que vous vouliez dire, puis j'ai découvert que le css était bloqué au redémarrage de Jenkins. J'ai donc créé un travail Jenkins qui exécute la commande toutes les 12 heures. Semble faire l'affaire.
Aeropher
@Aeropher merci - Je suis un novice de Jenkins - comment configurer ce travail? Configurer une tâche générale avec une étape de construction de l'exécution de la commande par lots Windows?
Steerpike
3
@Steerpike C'est vrai, sauf que c'est une commande groovy, donc vous devez l'exécuter dans une étape de construction "Exécuter le système Groovy Script". Et puis dans la section "Build Triggers", j'ai sélectionné "Build Periodically" avec cette valeur: H 12 * * *
Aeropher
En fait, vous n'avez même pas besoin de réexécuter votre build. Rechargez simplement le HTML généré à partir de Jenkins et cela prendrait l'effet du changement de politique.
hshib
22

Dans CentOs , pour activer les images dans le rapport html

  • sudo vi /etc/sysconfig/jenkins
  • ensemble suivant dans JENKINS_JAVA_OPTION

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;\""

Cela fonctionnera même après le redémarrage du serveur de jenkins.


Directif

default-src : le default-src est la politique par défaut pour le chargement de contenu tel que JavaScript, Images, CSS, Polices, Requêtes AJAX, Frames, HTML5 Media

img-src: définit les sources d'images valides.

Valeur source

'self' - Permet de charger des ressources de la même origine (même schéma, hôte et port).

Utilisation: default-src 'self'

'unsafe-inline' - Permet l'utilisation d'éléments source en ligne tels que l'attribut de style, onclick ou les corps de balises de script (dépend du contexte de la source à laquelle il est appliqué) et javascript: URI.

Utilisation: default-src 'unsafe-inline'

'unsafe-eval' - Permet une évaluation de code dynamique non sécurisée telle que JavaScript eval ()

Utilisation: default-src 'unsafe-eval'

data: - Permet de charger des ressources via le schéma de données (par exemple des images encodées en Base64).

Utilisation: img-src 'self' data:

Veuillez consulter la politique de sécurité du contenu ici

jithinkmatthew
la source
1
vous ne devriez activer que le css en ligne, et pas toutes ces autres choses dangereuses
OrangeDog
Si vous utilisez un svg dans un objet dans une partie de données comme celle-ci <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(résultat de la documentation interactive asciidoctor spring-rest pour le diagramme plantuml intégré), vous devez définir object-src sur self. Avis de fuite:JENKINS_JAVA_OPTIONS='-Djava.awt.headless=true -Dhudson.security.HudsonPrivateSecurityRealm.ID_REGEX="^[a-zA-Z0-9_.-]+$" -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src '\''none'\''; img-src '\''self'\''; style-src '\''self'\''; object-src '\''self'\'';"'
Lubo
1
génial! peut également être utilisé pour le menu fixe avec --env JAVA_OPTS = "..."
smelm
1
Pour mon installation ubuntu, j'ai utilisé vi /etc/default/jenkinsavec la variableJAVA_ARGS
mRyan
14

Allez dans «Gérer Jenkins» -> «Console de script» et exécutez la commande ci-dessous:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
Som
la source
3
Après avoir modifié le deuxième paramètre avec les valeurs mentionnées par kithinkmatthew, cela a fonctionné pour moi, c'estSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt
@AndrewMackrodt ce que vous avez suggéré est la seule solution qui a fonctionné pour moi (j'utilise Jenkins sur CentOS)
lax1089
12

(La solution suivante est pour Windows.)

Une solution permanente est de changer une ligne [Jenkins directory]\jenkins.xml(pour moi, c'est à C:\Jenkins\jenkins.xml)

<executable>java.exe</executable>
<arguments>[arguments are here]</arguments>

Ajoutez l'argument suivant à la liste d'arguments séparés par des espaces:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Ensuite, redémarrez le service Jenkins pour récupérer la modification.

Twasbrillig
la source
1
c'est la seule réponse de travail pour moi, j'ai également ajouté -Dfile.encoding=UTF-8aux arguments
Sasha Bond
9

Vous pouvez résoudre ce problème en utilisant la commande groovy comme spécifié dans la réponse de Vall .

L'effet est en place jusqu'à ce que Jenkins redémarre et ensuite vous devez le refaire.

Une solution pour résoudre ce problème consiste à configurer un travail qui le fera pour vous chaque fois que jenkins démarre.

Vous pouvez le faire en utilisant le plugin Startup Trigger .

Après l'avoir installé, créez un nouveau travail et vous aurez une nouvelle case à cocher dans la section Build Triggers que vous devrez cocher.

Ensuite, ajoutez une étape de génération de script Groovy système Execute avec la commande:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

Enregistrez et tout devrait fonctionner.

dragosb
la source
Avec cette méthode, vous devez également installer le plugin Groovy, si vous ne l'avez pas déjà fait. Sinon, l'étape de génération de script Groovy système d'exécution ne s'affichera pas parmi les options de génération.
Bálint Pap le
5

Pour la version Ubuntu 14, des plugins spéciaux étaient utiles:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Pour démarrer le travail au démarrage de jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Pour exécuter le script System Groovy

Et j'ai fait un travail, qui commence au redémarrage de Jenkins et définit les paramètres.

configuré pour démarrer la compilation après l'exécution de Jenkins

Et ajout du script système Groovy pour définir le paramètre Exécuter le script System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "bac à sable; img-src 'self';")

abiab
la source
Bien que l'exécution du travail se termine avec succès, cela n'active pas l'affichage CSS pour mes rapports. J'ai exécuté exactement le même script groovy dans la "console de script" et cela a bien fonctionné. Que puis-je faire d'autre? Le script groovy de ce travail ne change pas la propriété réelle de Jenkin parent.
frakman1
@ frakman1 en ce moment mon script Groovy ressemble à ceci - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Mais c'est tout et tout fonctionne. Peut-être que vous n'avez pas d'utilisateur administrateur?
abiab du
Merci pour votre réponse. J'ai finalement réussi à le faire fonctionner. J'ai dû utiliser ce script à la place:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src *")
frakman1
1

Aller à

Gérer Jenkins -> Console de script

et tapez la commande suivante:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

puis appuyez sur Exécuter. si vous obtenez la sortie comme "Résultat", réexécutez la construction, vérifiez le format du rapport HTML

Shailendra
la source
1

Pour définir de manière permanente, créez un fichier de script Groovy $ JENKINS_HOME / init.groovy , ou tout fichier .groovy dans le répertoire $ JENKINS_HOME / init.groovy.d / avec le contenu suivant:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts; default-src 'self'; img-src *; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline';")

systemctl redémarrer jenkins

https://wiki.jenkins.io/display/JENKINS/Post-initialization+script

Karen Danielyan
la source
1

Ouvrez le fichier jenkins.xml et copiez les arguments comme ci-dessous. il réparera définitivement. Une fois terminé, redémarrez votre machine.

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline';" -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments
Siva
la source
1

Sur CentOS , la solution ci-dessous (qui a été suggérée dans les commentaires d'une autre réponse) est la seule qui a fonctionné pour moi:

  1. Accédez à: Gérer Jenkins> Gérer les nœuds et les nuages
  2. Cliquez sur l'icône d'engrenage sur le côté droit du nœud (par défaut, il n'y aura qu'un seul nœud appelé Master)
  3. Cliquez sur "Script Console" sur la gauche
  4. Entrez ce qui suit dans la fenêtre de la console: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Cliquez sur Exécuter
  6. Vous devriez voir une sortie dans la section Résultat, similaire à la capture d'écran ci-dessous:

Résultat de la console de script

Mon problème particulier était des images / css manquantes dans les rapports Serenity BDD. Après avoir effectué ces étapes, mes rapports Serenity avaient toutes les images / rendu css correctement, y compris les rapports des versions qui avaient été exécutées avant ce changement. Cette solution fonctionnera également pour tout rapport HTML publié.

lax1089
la source
0

Il est trop tard pour répondre mais pensé à partager.

J'avais du mal avec Jenkins déployé sur Tomcat, j'ai essayé l'exécution du script, cela aide mais disparaît si Tomcat est redémarré.

Correction permanente en définissant la propriété dans catalina.properties dans tomcat.

Fichier de propriétés: rép_installation_tomcat / conf / catalina.properties Il suffit de copier-coller la ligne ci-dessous dans catalina.properties à la fin (vous pouvez le définir n'importe où pour ne pas gâcher les propriétés existantes)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""

développeur Java
la source
0

J'ai eu les mêmes problèmes après avoir ajouté HTTPS à mes jenkins. Si vous rencontrez le même problème, la solution est simple: définissez votre URL Jenkins pour utiliser le protocole HTTPS au lieu de HTTP. Il peut être configuré via la configuration jenkins -> URL jenkins

Ben Yitzhaki
la source
0

Pour définir la propriété système de manière permanente si vous utilisez Jenkins-X , créez le fichier myvalues.yamldans le répertoire courant, avec le contenu suivant:

jenkins:
  Master:
    JavaOpts: >
      -Dhudson.model.DirectoryBrowserSupport.CSP=

Ensuite, redémarrez la plate-forme jenkins-x, ce qui peut être fait en la mettant à niveau:

$ jx upgrade platform --always-upgrade
# Presumably jx.exe is used if on Windows (not tested)

Pour éviter de mettre à niveau la plate-forme, il suffit de la mettre à niveau de force vers la même version:

$ version=$(jx version --no-version-check\
            | grep 'jenkins x platform' | sed -e 's/^jenkins.\+ //')
$ jx upgrade platform --version ${version} --always-upgrade
Gunnar
la source
0

Pour ceux qui utilisent le asciidoctor-maven-pluginplugin pour produire un document HTML à partir du fichier asciidoc afin de le publier davantage sur Jenkins, mettez à jour la configuration du plugin, ajoutez l' linkcssattribut:

<configuration>
    <attributes>
        <linkcss>true</linkcss>
    </attributes>
    <backend>html5</backend>
    <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
</configuration>
Vijay Nandwana
la source
-2

Sur Debian / Ubuntu , dans les installations aptitude :

  • sudo vi /etc/default/jenkins
  • Ajouter -Dhudson.model.DirectoryBrowserSupport.CSP=au JAVA_ARGS(par exemple JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Redémarrez jenkins - service jenkins restart

Cela me suffisait, mais pour la liste complète des paramètres, voyez cette réponse .

bushi
la source