Jenkins - HTML Publisher Plugin - Beim Anzeigen des Berichts in Jenkins Server wird kein CSS angezeigt


91

Ich habe ein seltsames Problem mit dem Jenkins HTML Publisher-Plugin, bei dem das gesamte ausgefallene CSS, das ich dem Bericht hinzugefügt habe, bei der Anzeige in Jenkins entfernt wird. Wenn ich den Bericht auf local herunterlade, kann ich die CSS-Formatierung sehen. Gibt es in Jenkins eine Einstellung, mit der CSS angezeigt werden kann?

Meine HTML Publisher-Einstellungen in Jenkins:

Geben Sie hier die Bildbeschreibung ein

Meine Berichtsseite bei Anzeige in Jenkins:

Geben Sie hier die Bildbeschreibung ein

Meine Berichtsseite bei Anzeige in Lokal:

Geben Sie hier die Bildbeschreibung ein



2
Jeder sagt, Sie "beheben" es, indem Sie die Inhaltssicherheitsrichtlinie deaktivieren, ohne darüber nachzudenken, warum sie überhaupt vorhanden ist. Jeder, der die zu erstellenden Änderungen beeinflussen kann, kann die Administratoranmeldeinformationen entführen und Zugriff auf den gesamten Jenkins-Cluster erhalten. Während Inline-CSS meistens sicher ist, wenn Sie vorsichtig sind, ist das Zulassen von Skripten eine Katastrophe.
OrangeDog

Antworten:


173

Ich habe das Problem herausgefunden. Hier für andere Benutzer freigeben.

CSS wird aufgrund der Inhaltssicherheitsrichtlinie in Jenkins entfernt. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

Die Standardregel lautet:

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

Dieser Regelsatz führt zu folgenden Ergebnissen:

  • Kein JavaScript erlaubt
  • Keine Plugins (Objekt / Einbettung) erlaubt
  • Kein Inline-CSS oder CSS von anderen Websites zulässig
  • Keine Bilder von anderen Seiten erlaubt
  • Keine Frames erlaubt
  • Keine Web-Schriftarten erlaubt
  • Kein XHR / AJAX erlaubt usw.

Um diese Regel zu lockern, gehen Sie zu

  1. Jenkins verwalten->
  2. Knoten verwalten->
  3. Klicken Sie auf Einstellungen (Zahnradsymbol) ->
  4. Klicken Sie links auf Skriptkonsole und geben Sie den folgenden Befehl ein:

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

und drücken Sie Ausführen. Wenn Sie die Ausgabe als "Ergebnis:" unter der Überschrift "Ergebnis" sehen, ist der Schutz deaktiviert. Führen Sie Ihren Build erneut aus, und Sie können sehen, dass für die neuen archivierten HTML-Dateien das CSS aktiviert ist.


1
Vielen Dank!!! Es hat mir wirklich geholfen, dieses CSS-Problem zu lösen, das ich mit Jenkins hatte.
Eyal Sooliman

1
@Steerpike Ich habe mich gefragt, was du meinst und dann herausgefunden, dass das CSS beim Neustart von Jenkins blockiert wurde. Also habe ich einen Jenkins-Job erstellt, der den Befehl alle 12 Stunden ausführt. Scheint den Trick zu machen.
Aeropher

@Aeropher danke - ich bin ein Jenkins-Neuling - wie richte ich diesen Job ein? Einen allgemeinen Job mit einem Build-Schritt zum Ausführen des Windows-Stapelbefehls einrichten?
Steerpike

3
@Steerpike Das stimmt, außer dass es sich um einen groovigen Befehl handelt. Sie müssen ihn also in einem Build-Schritt "System-Groovy-Skript ausführen" ausführen. Und dann habe ich im Abschnitt "Build Triggers" "Build Periodically" mit diesem Wert ausgewählt: H 12 * * *
Aeropher

Tatsächlich müssen Sie Ihren Build nicht einmal erneut ausführen. Laden Sie einfach den generierten HTML-Code von Jenkins neu, und die Richtlinienänderung wird wirksam.
Hshib

21

In CentOs , um Bilder im HTML-Bericht zu aktivieren

  • sudo vi /etc/sysconfig/jenkins
  • setze folgendes in 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:;\""

Dies funktioniert auch nach dem Neustart des Jenkins-Servers.


Richtlinie

default-src : Das default-src ist die Standardrichtlinie zum Laden von Inhalten wie JavaScript, Bildern, CSS, Schriftarten, AJAX-Anforderungen, Frames und HTML5-Medien

img-src: Definiert gültige Bildquellen.

Quellwert

'self' - Ermöglicht das Laden von Ressourcen desselben Ursprungs (gleiches Schema, Host und Port).

Verwendung : default-src 'self'

'unsafe-inline' - Ermöglicht die Verwendung von Inline-Quellelementen wie Stilattributen, Onclick- oder Skript-Tag-Körpern (abhängig vom Kontext der Quelle, auf die sie angewendet wird) und Javascript: URIs.

Verwendung : default-src 'unsafe-inline'

'unsafe-eval' - Ermöglicht die Auswertung unsicherer dynamischer Codes wie JavaScript eval ()

Verwendung : default-src 'unsafe-eval'

Daten: - Ermöglicht das Laden von Ressourcen über das Datenschema (z. B. Base64-codierte Bilder).

Verwendung : img-src 'self' data:

Weitere Informationen zur Inhaltssicherheit finden Sie hier


1
Sie sollten nur Inline-CSS aktivieren und nicht all diese anderen unsicheren Dinge
OrangeDog

Wenn Sie ein svg in Objekt in einem Datenteil wie diesem verwenden <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(Ergebnis einer interaktiven Dokumentation zur Asciidoctor-Federruhe für ein eingebettetes Plantuml-Diagramm), müssen Sie object-src auf self setzen. Hinweis entkommen: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

groß! kann auch für Docker mit --env JAVA_OPTS = "..."
smelm

1
Für meine Ubuntu-Installation habe ich vi /etc/default/jenkinsmit der VariablenJAVA_ARGS
mRyan

14

Gehen Sie zu "Jenkins verwalten" -> "Skriptkonsole" und führen Sie den folgenden Befehl aus:

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

3
Nachdem ich den zweiten Parameter auf die von kithinkmatthew genannten Werte geändert hatte, funktionierte dies für mich, dhSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@ AndrewMackrodt Was Sie vorgeschlagen haben, ist die einzige Lösung, die für mich funktioniert hat (ich verwende Jenkins unter CentOS)
lax1089

12

(Die folgende Lösung ist für Windows.)

Eine dauerhafte Lösung besteht darin, eine Zeile zu ändern [Jenkins directory]\jenkins.xml(für mich ist es bei C:\Jenkins\jenkins.xml)

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

Fügen Sie der durch Leerzeichen getrennten Liste von Argumenten das folgende Argument hinzu:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Starten Sie dann den Jenkins-Dienst neu, um die Änderung zu übernehmen.


1
Das ist die einzige funktionierende Antwort für mich, die ich auch -Dfile.encoding=UTF-8zu den Argumenten hinzugefügt habe
Sasha Bond

9

Sie können dies beheben, indem Sie den groovigen Befehl verwenden, der in Valls Antwort angegeben ist.

Der Effekt bleibt bestehen, bis Jenkins neu startet und Sie ihn anschließend erneut ausführen müssen.

Eine Lösung zur Lösung dieses Problems besteht darin, einen Job zu konfigurieren, der dies für Sie erledigt, wenn Jenkins gestartet wird.

Sie können dies mit dem Startup Trigger Plugin tun .

Nachdem Sie es installiert haben, erstellen Sie einen neuen Job und Sie haben ein neues Kontrollkästchen im Abschnitt Build Triggers , das Sie aktivieren müssen.

Fügen Sie dann mit dem folgenden Befehl einen Schritt zum Erstellen eines System-Groovy-Skripts hinzu:

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

Speichern und alles sollte funktionieren.


Bei dieser Methode müssen Sie auch das Groovy-Plugin installieren, falls Sie dies noch nicht getan haben. Andernfalls wird der Schritt zum Erstellen eines Groovy-Skripts für das System nicht unter den Erstellungsoptionen angezeigt.
Bálint Pap

5

Für die Ubuntu 14-Version waren spezielle Plugins hilfreich:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Zum Starten des Jobs beim Start von Jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Zum Ausführen des System Groovy-Skripts

Und ich habe einen Job gemacht, der beim Neustart von Jenkins beginnt und Parameter festlegt.

Set, um den Build zu starten, nachdem Jenkins ausgeführt wurde

Und System Groovy Skript hinzugefügt, um Parameter festzulegen. Führen Sie das System Groovy-Skript aus System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


Obwohl die Ausführung des Jobs erfolgreich abgeschlossen wurde, wird die CSS-Anzeige für meine Berichte nicht aktiviert. Ich habe genau das gleiche groovige Skript in der "Skriptkonsole" ausgeführt und das hat gut funktioniert. Was kann ich sonst noch tun? Das groovige Skript dieses Jobs ändert nicht die eigentliche Eigenschaft des übergeordneten Jenkins.
frakman1

@ frakman1 In diesem Moment sieht mein Groovy-Skript so aus - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Aber das ist alles und alles funktioniert. Vielleicht haben Sie keinen Administrator?
Abiab

Danke für die Antwort. Ich habe es schließlich zum Laufen gebracht. Ich musste stattdessen dieses Skript verwenden: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

Gehe zu

Jenkins verwalten -> Skriptkonsole

und geben Sie den folgenden Befehl ein:

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

Drücken Sie dann Ausführen. Wenn Sie die Ausgabe als 'Ergebnis' erhalten, führen Sie den Build erneut aus und überprüfen Sie das HTML-Berichtsformat


1

Zum dauerhaften Festlegen erstellen Sie eine Groovy-Skriptdatei $ JENKINS_HOME / init.groovy oder eine beliebige .groovy- Datei im Verzeichnis $ JENKINS_HOME / init.groovy.d / mit folgendem Inhalt:

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

systemctl jenkins neu starten

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


1

Öffnen Sie die Datei jenkins.xml und kopieren Sie die Argumente wie folgt. es wird dauerhaft behoben. Sobald dies erledigt ist, starten Sie Ihren Computer neu.

<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

1

Unter CentOS ist die folgende Lösung (die in Kommentaren einer anderen Antwort vorgeschlagen wurde) die einzige, die für mich funktioniert hat:

  1. Gehen Sie zu: Jenkins verwalten> Knoten und Wolken verwalten
  2. Klicken Sie auf der rechten Seite auf das Zahnradsymbol für den Knoten (standardmäßig gibt es nur einen Knoten namens Master).
  3. Klicken Sie links auf "Skriptkonsole"
  4. Geben Sie Folgendes in das Konsolenfenster ein: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Klicken Sie auf Ausführen
  6. Im Abschnitt Ergebnis sollten einige Ausgaben angezeigt werden, ähnlich wie im folgenden Screenshot:

Ergebnis der Skriptkonsole

Mein besonderes Problem war das Fehlen von Bildern / CSS in Serenity BDD-Berichten. Nachdem diese Schritte ausgeführt wurden, wurden in meinen Serenity-Berichten alle Bilder / CSS ordnungsgemäß gerendert, einschließlich Berichten aus Builds, die vor dieser Änderung ausgeführt wurden. Diese Lösung funktioniert auch für alle veröffentlichten HTML-basierten Berichte.


0

Es ist zu spät, um zu antworten, aber gedacht, um zu teilen.

Ich hatte Probleme mit Jenkins, das auf Tomcat bereitgestellt wurde, habe versucht, ein Skript auszuführen. Es hilft, geht aber verloren, wenn Tomcat neu gestartet wird.

Die dauerhafte Korrektur wurde vorgenommen, indem die Eigenschaft in catalogina.properties in tomcat festgelegt wurde.

Eigenschaftendatei: tomcat_installation_dir / conf / catalogina.properties Kopieren Sie einfach die folgende Zeile und fügen Sie sie zuletzt in Catalina.properties ein (Sie können sie überall festlegen, um die vorhandenen Eigenschaften nicht zu beeinträchtigen).

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

Ich hatte die gleichen Probleme, nachdem ich meinen Jenkins HTTPS hinzugefügt hatte. Wenn Sie das gleiche Problem haben, ist die Lösung einfach: Stellen Sie Ihre Jenkins-URL so ein, dass das HTTPS-Protokoll anstelle von HTTP verwendet wird. Es kann über Jenkins Konfiguration konfiguriert werden -> Jenkins URL


0

Um die Systemeigenschaft bei Verwendung von Jenkins-X dauerhaft festzulegen , erstellen Sie die Datei myvalues.yamlim aktuellen Verzeichnis mit folgendem Inhalt:

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

Starten Sie dann die jenkins-x-Plattform neu. Dies kann durch ein Upgrade erfolgen:

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

Um zu vermeiden, dass die Plattform tatsächlich aktualisiert wird, aktualisieren Sie sie einfach zwangsweise auf dieselbe Version:

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

0

Für diejenigen, die das asciidoctor-maven-pluginPlugin verwenden, um ein HTML-Dokument aus der asciidoc-Datei zu erstellen und es weiter in Jenkins zu veröffentlichen, aktualisieren Sie die Plugin-Konfiguration und fügen Sie das folgende linkcssAttribut hinzu:

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

-2

Unter Debian / Ubuntu in Eignungsinstallationen :

  • sudo vi /etc/default/jenkins
  • In -Dhudson.model.DirectoryBrowserSupport.CSP=auf die JAVA_ARGS( zum Beispiel JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Jenkins neu starten - service jenkins restart

Das hat mir gereicht, aber die vollständige Liste der Parameter finden Sie in dieser Antwort .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.