Jenkins - HTML Publisher Plugin - Tidak ada CSS yang ditampilkan saat laporan dilihat di Server Jenkins


92

Saya memiliki masalah aneh dengan plugin Jenkins HTML Publisher, di mana semua CSS mewah yang telah saya tambahkan ke laporan dihilangkan jika dilihat di Jenkins. Jika saya mendownload laporan ke lokal, saya bisa melihat format CSS. Apakah ada pengaturan di Jenkins yang memungkinkan CSS untuk dilihat?

Pengaturan Penerbit HTML Saya di Jenkins:

masukkan deskripsi gambar di sini

Halaman Laporan Saya saat ditampilkan di Jenkins:

masukkan deskripsi gambar di sini

Halaman Laporan Saya saat ditampilkan di Lokal:

masukkan deskripsi gambar di sini



2
Semua orang mengatakan Anda "memperbaikinya" dengan menonaktifkan Kebijakan Keamanan Konten, tanpa memikirkan alasannya. Siapa pun yang dapat memengaruhi perubahan yang akan dibuat akan dapat membajak kredensial admin dan mendapatkan akses ke seluruh cluster Jenkins. Sementara css sebaris sebagian besar aman jika Anda berhati-hati, mengizinkan skrip adalah bencana.
OrangeDog

Jawaban:


174

Mengetahui masalahnya. Berbagi di sini untuk pengguna lain.

CSS dihapus karena Kebijakan Keamanan Konten di Jenkins. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

Aturan default ditetapkan ke:

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

Kumpulan aturan ini menghasilkan sebagai berikut:

  • Tidak ada JavaScript yang diizinkan sama sekali
  • Tidak ada plugin (objek / embed) yang diizinkan
  • Tidak ada CSS sebaris, atau CSS dari situs lain yang diperbolehkan
  • Tidak ada gambar dari situs lain yang diizinkan
  • Tidak ada bingkai yang diizinkan
  • Tidak ada font web yang diizinkan
  • Tidak ada XHR / AJAX yang diizinkan, dll.

Untuk melonggarkan aturan ini, buka

  1. Kelola Jenkins->
  2. Kelola Node->
  3. Klik pengaturan (ikon roda gigi) ->
  4. klik konsol Script di sebelah kiri dan ketik perintah berikut:

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

dan Tekan Jalankan. Jika Anda melihat keluaran sebagai 'Hasil:' di bawah tajuk "Hasil", maka perlindungan dinonaktifkan. Jalankan ulang build Anda dan Anda dapat melihat bahwa file HTML baru yang diarsipkan akan mengaktifkan CSS.


1
Terima kasih!!! Ini sangat membantu saya mengatasi masalah css yang saya alami dengan jenkins.
Eyal Sooliman

1
@Steerpike Saya bertanya-tanya apa yang Anda maksud dan kemudian menemukan bahwa css diblokir saat Jenkins memulai ulang. Jadi saya membuat pekerjaan Jenkins yang menjalankan perintah setiap 12 jam. Tampaknya berhasil.
Aeropher

@Aeropher terima kasih - Saya seorang pemula Jenkins - bagaimana saya mengatur pekerjaan itu? Siapkan pekerjaan umum dengan Build Step of Execute Windows Batch Command?
Steerpike

3
@Steerpike Benar, kecuali ini adalah perintah yang keren, jadi Anda harus menjalankannya dalam langkah pembuatan "Jalankan Skrip Groovy sistem". Dan kemudian di bawah bagian "Build Triggers" saya memilih "Build Periodically" dengan nilai ini: H 12 * * *
Aeropher

Sebenarnya, Anda bahkan tidak perlu menjalankan ulang build Anda. Cukup muat ulang HTML yang dibuat dari Jenkins dan perubahan kebijakan akan diterapkan.
hshib

23

Di CentOs , untuk mengaktifkan gambar dalam laporan html

  • sudo vi /etc/sysconfig/jenkins
  • mengatur mengikuti 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:;\""

Ini akan bekerja bahkan setelah memulai ulang server jenkins.


Pengarahan

default-src : Default-src adalah kebijakan default untuk memuat konten seperti JavaScript, Gambar, CSS, Font, permintaan AJAX, Frames, HTML5 Media

img-src: Mendefinisikan sumber gambar yang valid.

Nilai Sumber

'self' - Memungkinkan memuat sumber daya dari asal yang sama (skema, host, dan port yang sama).

Penggunaan: default-src 'self'

'unsafe-inline' - Mengizinkan penggunaan elemen sumber sebaris seperti atribut gaya, onclick, atau badan tag skrip (bergantung pada konteks sumber yang diterapkan) dan javascript: URI.

Penggunaan: default-src 'unsafe-inline'

'unsafe-eval' - Memungkinkan evaluasi kode dinamis yang tidak aman seperti JavaScript eval ()

Penggunaan: default-src 'unsafe-eval'

data: - Memungkinkan memuat sumber daya melalui skema data (misalnya gambar yang dikodekan Base64).

Penggunaan: img-src 'self' data:

Silakan lihat lebih lanjut tentang kebijakan keamanan konten di sini


1
Anda seharusnya hanya mengaktifkan inline css, dan tidak semua hal tidak aman lainnya
OrangeDog

Jika Anda menggunakan beberapa svg dalam objek di bagian data seperti ini <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(hasil dokumentasi pegas asciidoctor interaktif untuk diagram plantuml tertanam), Anda perlu mengatur objek-src ke diri sendiri. Pemberitahuan melarikan diri: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
Bagus! dapat digunakan untuk buruh pelabuhan juga dengan --env JAVA_OPTS = "..."
smelm

1
Untuk instalasi ubuntu saya, saya menggunakan vi /etc/default/jenkinsvariabelJAVA_ARGS
mRyan

14

Buka "Kelola Jenkins" -> "Konsol skrip" dan jalankan perintah di bawah ini:

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

3
Setelah memodifikasi parameter kedua ke nilai yang disebutkan oleh kithinkmatthew ini berhasil untuk saya, yaituSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@AndrewMackrodt apa yang Anda sarankan adalah satu-satunya solusi yang berhasil untuk saya (Saya menjalankan Jenkins di CentOS)
lax1089

12

(Solusi berikut untuk Windows.)

Perbaikan permanen adalah mengubah garis masuk [Jenkins directory]\jenkins.xml(bagi saya itu di C:\Jenkins\jenkins.xml)

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

Tambahkan argumen berikut ke daftar argumen yang dipisahkan spasi putih:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Kemudian mulai ulang layanan Jenkins untuk mengambil perubahan.


1
itulah satu-satunya jawaban yang berhasil bagi saya, saya juga menambahkan -Dfile.encoding=UTF-8argumen
Sasha Bond

9

Anda dapat memperbaikinya dengan menggunakan perintah groovy seperti yang ditentukan di Vall jawaban .

Efeknya ada sampai Jenkins dimulai ulang dan setelah itu Anda harus melakukannya lagi.

Solusi untuk mengatasi masalah ini adalah dengan mengkonfigurasi pekerjaan yang akan melakukan ini untuk Anda setiap kali jenkins dijalankan.

Anda dapat melakukannya dengan menggunakan plugin Startup Trigger .

Setelah Anda menginstalnya, buat pekerjaan baru dan Anda akan memiliki kotak centang baru di bawah Build Triggers yang harus Anda periksa.

Kemudian tambahkan langkah pembuatan skrip Groovy sistem Eksekusi dengan perintah:

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

Simpan dan semuanya harus berfungsi.


Dengan metode ini, Anda perlu menginstal plugin Groovy juga, jika Anda belum memilikinya. Jika tidak, langkah build skrip Execute system Groovy tidak akan ditampilkan di antara opsi build.
Bálint Pap

5

Untuk versi Ubuntu 14 yang membantu adalah plugin khusus:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Untuk memulai pekerjaan di jenkins startup

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Untuk menjalankan skrip System Groovy

Dan saya berhasil, yang dimulai saat Jenkins memulai ulang dan menyetel parameter.

disetel untuk mulai membangun setelah Jenkins dijalankan

Dan menambahkan skrip Groovy sistem untuk mengatur parametr. Jalankan skrip System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


Meskipun menjalankan pekerjaan selesai dengan sukses, ini tidak mengaktifkan tampilan CSS untuk laporan saya. Saya menjalankan skrip asyik yang sama persis di "Script Console" dan itu berfungsi dengan baik. Apa lagi yang bisa saya lakukan? Skrip asyik pekerjaan ini tidak mengubah properti induk Jenkin yang sebenarnya.
frakman1

@ frakman1 saat ini skrip Groovy saya terlihat seperti ini - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Tapi itu saja dan semuanya berfungsi. Mungkin Anda tidak memiliki pengguna admin?
abiab

Terima kasih atas tanggapannya. Saya akhirnya berhasil. Saya harus menggunakan skrip ini sebagai gantinya: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

Pergi ke

Kelola Jenkins -> Konsol skrip

dan ketik perintah berikut:

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

lalu Tekan Jalankan. jika Anda mendapatkan output sebagai 'Hasil', maka jalankan kembali build, periksa format laporan HTML


1

Untuk pengaturan secara permanen buat file skrip Groovy $ JENKINS_HOME / init.groovy , atau file .groovy apa pun di direktori $ JENKINS_HOME / init.groovy.d / dengan konten berikut:

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

systemctl restart jenkins

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


1

Buka file jenkins.xml dan salin argumen seperti di bawah ini. itu akan diperbaiki secara permanen. Setelah selesai, restart mesin Anda.

<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

Di CentOS , solusi di bawah ini (yang disarankan dalam komentar jawaban lain) adalah satu-satunya yang berhasil untuk saya:

  1. Pergi ke: Kelola Jenkins> Kelola Nodes and Clouds
  2. Klik ikon Roda Gigi di sisi kanan untuk node (secara default hanya akan ada satu Node yang disebut Master)
  3. Klik 'Script Console' di sebelah kiri
  4. Masukkan yang berikut ini ke jendela konsol: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Klik Jalankan
  6. Anda akan melihat beberapa output di bagian Hasil, mirip dengan gambar di bawah ini:

Hasil Konsol Skrip

Masalah khusus saya adalah kehilangan gambar / css dalam laporan Serenity BDD. Setelah melakukan langkah-langkah ini, laporan Serenity saya memiliki semua gambar / css yang dirender dengan benar, termasuk laporan dari build yang telah dieksekusi sebelum perubahan ini. Solusi ini juga akan berfungsi untuk laporan berbasis html yang dipublikasikan.


0

Sudah terlambat untuk menanggapi tetapi berpikir untuk berbagi.

Saya berjuang dengan Jenkins yang diterapkan di Tomcat, mencoba eksekusi skrip, itu membantu tetapi hilang jika tomcat di-boot ulang.

Membuat perbaikan permanen dengan mengatur properti di catalina.properties di tomcat.

File properti: tomcat_installation_dir / conf / catalina.properties Cukup salin dan tempel baris di bawah ini di catalina.properties pada akhirnya (Anda dapat mengaturnya di mana saja agar tidak mengacaukan properti yang ada)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

Saya mengalami masalah yang sama setelah menambahkan HTTPS ke jenkins saya. Jika Anda mengalami masalah yang sama, solusinya mudah - setel url Jenkins Anda untuk menggunakan protokol HTTPS, bukan HTTP. Ini dapat dikonfigurasi melalui konfigurasi jenkins -> url jenkins


0

Untuk menyetel properti sistem secara permanen jika menggunakan Jenkins-X , buat file myvalues.yamldi direktori saat ini, dengan konten berikut:

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

Kemudian restart platform jenkins-x, yang dapat dilakukan dengan memutakhirkannya:

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

Untuk menghindari benar-benar mengupgrade platform, cukup upgrade secara paksa ke versi yang sama:

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

0

Bagi mereka yang menggunakan asciidoctor-maven-pluginplugin untuk menghasilkan dokumen HTML dari file asciidoc untuk mempublikasikannya lebih lanjut ke Jenkins, perbarui konfigurasi plugin, tambahkan linkcssatribut:

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

-2

Di Debian / Ubuntu , dalam penginstalan aptitude :

  • sudo vi /etc/default/jenkins
  • Tambahkan -Dhudson.model.DirectoryBrowserSupport.CSP=ke JAVA_ARGS(mis. JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Mulai ulang jenkins - service jenkins restart

Ini sudah cukup bagi saya, tetapi untuk daftar lengkap parameter, lihat jawaban ini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.