Jenkins - wtyczka HTML Publisher - podczas przeglądania raportu na serwerze Jenkins Server nie jest wyświetlany kod CSS

92

Mam dziwny problem z wtyczką Jenkins HTML Publisher, w której wszystkie fantazyjne CSS, które dodałem do raportu, są usuwane podczas przeglądania w Jenkins. Jeśli pobiorę raport do lokalnego, mogę zobaczyć formatowanie CSS. Czy w Jenkins jest ustawienie umożliwiające przeglądanie CSS?

Moje ustawienia wydawcy HTML w Jenkins:

wprowadź opis obrazu tutaj

Moja strona raportu, gdy jest wyświetlana w Jenkins:

wprowadź opis obrazu tutaj

Moja strona raportu, gdy jest wyświetlana w lokalnym:

wprowadź opis obrazu tutaj

Vall
źródło
2
Wszyscy mówią, że „naprawiasz” to, wyłączając Politykę bezpieczeństwa treści, bez zastanawiania się, dlaczego tak jest. Każdy, kto może wpłynąć na budowane zmiany, będzie mógł przejąć poświadczenia administratora i uzyskać dostęp do całego klastra Jenkins. Podczas gdy wbudowany css jest w większości bezpieczny, jeśli jesteś ostrożny, zezwalanie na używanie skryptów jest katastrofą.
OrangeDog,

Odpowiedzi:

174

Rozwiązałem problem. Udostępnianie go tutaj innym użytkownikom.

CSS jest usuwany z powodu polityki bezpieczeństwa treści w Jenkins. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

Domyślna reguła jest ustawiona na:

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

Efektem tego zestawu reguł są:

  • W ogóle nie jest dozwolony JavaScript
  • Żadne wtyczki (obiekt / osadzanie) nie są dozwolone
  • Niedozwolone są wbudowane arkusze CSS ani arkusze CSS z innych witryn
  • Żadne obrazy z innych witryn nie są dozwolone
  • Żadne ramki nie są dozwolone
  • Żadne czcionki internetowe nie są dozwolone
  • Niedozwolone XHR / AJAX itp.

Aby złagodzić tę zasadę, przejdź do

  1. Zarządzaj Jenkins->
  2. Zarządzaj węzłami->
  3. Kliknij ustawienia (ikona koła zębatego) ->
  4. kliknij konsolę skryptów po lewej stronie i wpisz następujące polecenie:

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

i naciśnij Uruchom. Jeśli zobaczysz wynik jako „Wynik:” pod nagłówkiem „Wynik”, oznacza to, że ochrona jest wyłączona. Uruchom ponownie kompilację i zobaczysz, że nowe zarchiwizowane pliki HTML będą miały włączony CSS.

Vall
źródło
1
Dziękuję Ci!!! Naprawdę pomogło mi to rozwiązać problem CSS, który miałem z Jenkinsem.
Eyal Sooliman
1
@Steerpike Zastanawiałem się, co masz na myśli, a potem dowiedziałem się, że css został zablokowany po ponownym uruchomieniu Jenkinsa. Utworzyłem więc zadanie Jenkinsa, które uruchamia polecenie co 12 godzin. Wydaje się, że to załatwia sprawę.
Aeropher
@Aeropher dziękuję - jestem nowicjuszem w Jenkins - jak skonfigurować tę pracę? Skonfigurować ogólne zadanie z krokiem kompilacji wykonywania polecenia wsadowego systemu Windows?
Steerpike
3
@Steerpike Zgadza się, z wyjątkiem tego, że jest to groovy polecenie, więc musisz je wykonać w kroku kompilacji „Wykonaj system Groovy Script”. Następnie w sekcji „Wyzwalacze budowania” wybrałem „Buduj okresowo” z następującą wartością: H 12 * * *
Aeropher,
W rzeczywistości nie musisz nawet ponownie uruchamiać kompilacji. Po prostu przeładuj wygenerowany kod HTML z Jenkinsa, a zmiana polityki będzie miała wpływ.
hshib,
22

W CentOs , aby włączyć obrazy w raporcie html

  • sudo vi /etc/sysconfig/jenkins
  • ustawić podążanie za 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:;\""

To zadziała nawet po ponownym uruchomieniu serwera Jenkinsa.


Dyrektywa

default-src : domyślne-src to domyślna zasada ładowania treści, takich jak JavaScript, obrazy, CSS, czcionki, żądania AJAX, ramki, multimedia HTML5

img-src: definiuje prawidłowe źródła obrazów.

Wartość źródłowa

' samego siebie ' - umożliwia ładowanie zasobów z tego samego źródła (ten sam schemat, host i port).

Stosowanie : default-src 'self'

„niebezpieczne w tekście” - umożliwia użycie wbudowanych elementów źródłowych, takich jak atrybut style, onclick lub treść znaczników skryptu (w zależności od kontekstu źródła, do którego jest stosowany) oraz javascript: URI.

Stosowanie : default-src 'unsafe-inline'

„unsafe-eval” - umożliwia ocenę niebezpiecznego kodu dynamicznego, takiego jak JavaScript eval ()

Stosowanie : default-src 'unsafe-eval'

dane: - Umożliwia ładowanie zasobów za pośrednictwem schematu danych (np. obrazy zakodowane w formacie Base64).

Stosowanie : img-src 'self' data:

Więcej informacji o polityce bezpieczeństwa treści znajdziesz tutaj

jithinkmatthew
źródło
1
powinieneś włączać tylko wbudowany css, a nie wszystkie inne niebezpieczne rzeczy
OrangeDog
Jeśli używasz jakiegoś svg w obiekcie w części danych takiej jak ta <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(wynik interaktywnej dokumentacji sprężyny asciidoctor dla osadzonego diagramu plantuml), musisz ustawić obiekt-src na self. Powiadomienie uciekające: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
świetny! może być również użyty dla dockera z --env JAVA_OPTS = "..."
smelm
1
W mojej instalacji ubuntu użyłem vi /etc/default/jenkinsze zmiennąJAVA_ARGS
mRyan
14

Idź do „Manage Jenkins” -> „Script console” i uruchom poniższe polecenie:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
Som
źródło
3
Po zmodyfikowaniu drugiego parametru do wartości podanych przez kithinkmatthew, zadziałało to dla mnie, tj.System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt
@AndrewMackrodt to, co zasugerowałeś, jest jedynym rozwiązaniem, które zadziałało dla mnie (używam Jenkinsa na CentOS)
lax1089
12

(Poniższe rozwiązanie dotyczy systemu Windows).

Stałym rozwiązaniem jest zmiana linii [Jenkins directory]\jenkins.xml(dla mnie to jest C:\Jenkins\jenkins.xml)

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

Dodaj następujący argument do listy argumentów oddzielonych spacjami:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Następnie uruchom ponownie usługę Jenkins, aby wprowadzić zmianę.

twasbrillig
źródło
1
to jedyna działająca dla mnie odpowiedź, dodałem również -Dfile.encoding=UTF-8do argumentów
Sasha Bond
9

Możesz to naprawić, używając groovy polecenia, jak określono w Vall .

Efekt utrzymuje się do ponownego uruchomienia Jenkinsa, a następnie musisz to zrobić ponownie.

Rozwiązaniem tego problemu jest skonfigurowanie zadania, które wykona to za Ciebie przy każdym uruchomieniu Jenkinsa.

Możesz to zrobić za pomocą wtyczki Startup Trigger .

Po zainstalowaniu utwórz nowe zadanie, a pod wyzwalaczami kompilacji pojawi się nowe pole wyboru sekcji , które będziesz musiał sprawdzić.

Następnie dodaj krok kompilacji skryptu Uruchom system Groovy za pomocą polecenia:

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

Oszczędzaj i wszystko powinno działać.

dragosb
źródło
W przypadku tej metody musisz również zainstalować wtyczkę Groovy, jeśli jeszcze tego nie zrobiłeś. W przeciwnym razie krok kompilacji skryptu Uruchom system Groovy nie będzie wyświetlany wśród opcji kompilacji.
Bálint Pap
5

W przypadku wersji Ubuntu 14 pomocne okazały się specjalne wtyczki:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Aby rozpocząć pracę przy uruchomieniu jenkinsa

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Aby uruchomić skrypt System Groovy

I wykonałem zadanie, które zaczyna się od restartu Jenkinsa i ustawia parametr.

zestaw do rozpoczęcia kompilacji po uruchomieniu Jenkinsa

Dodano systemowy skrypt Groovy do ustawiania parametrów. Uruchom skrypt System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")

abiab
źródło
Chociaż uruchomienie zadania kończy się pomyślnie, nie włącza wyświetlania CSS dla moich raportów. Uruchomiłem dokładnie ten sam groovy skrypt w "Script Console" i to działało dobrze. Co jeszcze mogę zrobić? Świetny skrypt tej pracy nie zmienia rzeczywistej właściwości rodzica Jenkina.
frakman1
@ frakman1 w tej chwili mój skrypt Groovy wygląda tak - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Ale to wszystko i wszystko działa. Może nie masz administratora?
abiab,
Dziękuję za odpowiedź. W końcu udało mi się to. Zamiast tego musiałem użyć tego skryptu: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

Iść do

Zarządzaj Jenkins -> konsolą skryptów

i wpisz następujące polecenie:

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

następnie naciśnij Uruchom. jeśli otrzymasz wynik jako „Wynik”, uruchom ponownie kompilację, sprawdź format raportu HTML

Shailendra
źródło
1

Aby ustawić na stałe, utwórz plik skryptowy Groovy $ JENKINS_HOME / init.groovy lub dowolny plik .groovy w katalogu $ JENKINS_HOME / init.groovy.d / z następującą zawartością:

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

systemctl zrestartuj jenkins

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

Karen Danielyan
źródło
1

Otwórz plik jenkins.xml i skopiuj argumenty jak poniżej. naprawi się na stałe. Po zakończeniu uruchom ponownie komputer.

<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
źródło
1

Na CentOS poniższe rozwiązanie (które zostało zasugerowane w komentarzach do innej odpowiedzi) jest jedynym, które zadziałało dla mnie:

  1. Idź do: Zarządzaj Jenkins> Zarządzaj węzłami i chmurami
  2. Kliknij ikonę koła zębatego po prawej stronie dla węzła (domyślnie będzie tylko jeden węzeł o nazwie Master)
  3. Kliknij „Konsola skryptów” po lewej stronie
  4. Wprowadź następujące informacje w oknie konsoli: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Kliknij Uruchom
  6. Powinieneś zobaczyć wyniki w sekcji Wynik, podobnie jak na poniższym zrzucie ekranu:

Wynik konsoli skryptu

Moim szczególnym problemem był brak obrazów / CSS w raportach Serenity BDD. Po wykonaniu tych czynności moje raporty Serenity miały poprawnie renderowane wszystkie obrazy / CSS, w tym raporty z kompilacji, które zostały wykonane przed tą zmianą. To rozwiązanie będzie również działać w przypadku każdego opublikowanego raportu w formacie HTML.

lax1089
źródło
0

Za późno na odpowiedź, ale pomyślałem, żeby się podzielić.

Walczyłem z Jenkinsem zainstalowanym na Tomcat, próbowałem wykonać skrypt, pomaga, ale znika, jeśli tomcat zostanie ponownie uruchomiony.

Naprawiono na stałe, ustawiając właściwość w Catalina.properties w tomcat.

Plik właściwości: tomcat_installation_dir / conf / catalina.properties Po prostu skopiuj, wklej na koniec poniższy wiersz w catalina.properties (możesz ustawić go w dowolnym miejscu, aby nie zadzierać z istniejącymi właściwościami)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""

Programista Java
źródło
0

Miałem te same problemy po dodaniu HTTPS do moich jenkinsów. Jeśli masz ten sam problem, rozwiązanie jest łatwe - ustaw adres URL Jenkins, aby używał protokołu HTTPS zamiast HTTP. Można go skonfigurować poprzez konfigurację jenkins -> jenkins url

Ben Yitzhaki
źródło
0

Aby ustawić właściwość systemową na stałe, jeśli używasz Jenkins-X , utwórz plik myvalues.yamlw bieżącym katalogu z następującą zawartością:

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

Następnie uruchom ponownie platformę jenkins-x, co można zrobić, aktualizując ją:

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

Aby uniknąć faktycznej aktualizacji platformy, po prostu wymuś aktualizację do tej samej wersji:

$ version=$(jx version --no-version-check\
            | grep 'jenkins x platform' | sed -e 's/^jenkins.\+ //')
$ jx upgrade platform --version ${version} --always-upgrade
Gunnar
źródło
0

Dla tych, którzy używają asciidoctor-maven-pluginwtyczki do tworzenia dokumentu HTML z pliku asciidoc w celu dalszego publikowania go w Jenkins, zaktualizuj konfigurację wtyczki, dodaj linkcssatrybut:

<configuration>
    <attributes>
        <linkcss>true</linkcss>
    </attributes>
    <backend>html5</backend>
    <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
</configuration>
Vijay Nandwana
źródło
-2

W systemie Debian / Ubuntu w instalacjach aptitude :

  • sudo vi /etc/default/jenkins
  • Dodaj -Dhudson.model.DirectoryBrowserSupport.CSP=do JAVA_ARGS(np. JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Uruchom ponownie Jenkins - service jenkins restart

To mi wystarczyło, ale pełna lista parametrów znajduje się w tej odpowiedzi .

bushi
źródło