Jenkins - HTML Yayıncı Eklentisi - Jenkins Sunucusunda rapor görüntülendiğinde CSS görüntülenmiyor


92

Jenkins HTML Publisher eklentisiyle ilgili garip bir problemim var, burada rapora eklediğim tüm süslü CSS'ler Jenkins'te görüntülendiğinde çıkarılıyor. Raporu yerel olarak indirirsem, CSS biçimlendirmesini görebilirim. Jenkins'te CSS'nin görüntülenmesine izin veren bir ayar var mı?

Jenkins'teki HTML Yayıncı Ayarlarım:

görüntü açıklamasını buraya girin

Jenkins'te görüntülendiğinde Rapor Sayfam:

görüntü açıklamasını buraya girin

Yerel olarak görüntülendiğinde Rapor Sayfam:

görüntü açıklamasını buraya girin



2
Herkes ilk etapta neden orada olduğunu düşünmeden İçerik Güvenliği Politikasını devre dışı bırakarak "düzeltdiğinizi" söylüyor. Oluşturulacak değişiklikleri etkileyebilen herkes, yönetici kimlik bilgilerini ele geçirebilir ve tüm Jenkins kümesine erişim elde edebilir. Satır içi css, dikkatli olursanız çoğunlukla güvenli olsa da, komut dosyalarına izin vermek bir felakettir.
OrangeDog

Yanıtlar:


174

Sorunu çözdüm. Burada diğer kullanıcılar için paylaşılıyor.

CSS, Jenkins'teki İçerik Güvenliği Politikası nedeniyle kaldırıldı. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

Varsayılan kural şu ​​şekilde ayarlanmıştır:

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

Bu kural kümesi aşağıdakileri sağlar:

  • Hiçbir JavaScript'e izin verilmez
  • Hiçbir eklentiye (nesne / yerleştirme) izin verilmez
  • Satır içi CSS veya diğer sitelerden CSS'ye izin verilmez
  • Diğer sitelerden resimlere izin verilmez
  • Çerçeveye izin verilmez
  • Web yazı tipine izin verilmez
  • XHR / AJAX'a izin verilmez, vb.

Bu kuralı gevşetmek için şuraya gidin:

  1. Jenkins'i Yönet->
  2. Düğümleri Yönet->
  3. Ayarları tıklayın (dişli simgesi) ->
  4. Soldaki Komut dosyası konsolunu tıklayın ve aşağıdaki komutu yazın:

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

ve Çalıştır'a basın. Çıkışı "Sonuç" başlığının altında "Sonuç:" olarak görürseniz koruma devre dışı bırakılır. Yapınızı yeniden çalıştırın ve arşivlenen yeni HTML dosyalarının CSS'nin etkin olduğunu görebilirsiniz.


1
Teşekkür ederim!!! Jenkins ile yaşadığım bu css sorununu çözmeme gerçekten yardımcı oldu.
Eyal Sooliman

1
@Steerpike Ne demek istediğini merak ettim ve sonra Jenkins'in yeniden başlatılmasıyla css'in engellendiğini öğrendim. Bu yüzden komutu her 12 saatte bir çalıştıran bir Jenkins işi yarattım. Hile yapıyor gibi görünüyor.
Aeropher

@Aeropher teşekkür ederim - Ben bir Jenkins acemisiyim - bu işi nasıl ayarlayabilirim? Build Step of Execute Windows Batch Command ile genel bir iş mi kuruyorsunuz?
Steerpike

3
@Steerpike Bu doğru, harika bir komut olması dışında, bu yüzden onu bir "Groovy Script Çalıştır" oluşturma adımında çalıştırmanız gerekir. Ve sonra "Tetikleyicileri Derle" bölümünün altında şu değerle "Periyodik Oluştur" u seçtim: H 12 * * *
Aeropher

Aslında, yapınızı yeniden çalıştırmanıza bile gerek yok. Oluşturulan HTML'yi Jenkins'ten yeniden yükleyin ve politika değişikliğinin etkisini gösterecektir.
hshib

22

Gelen CentOS , html raporunda görüntüleri etkinleştirmek için

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

Bu, jenkins sunucusunu yeniden başlattıktan sonra bile çalışacaktır.


Direktif

default-src : default-src, JavaScript, Görseller, CSS, Yazı Tipleri, AJAX istekleri, Çerçeveler, HTML5 Medyası gibi içerikleri yüklemek için varsayılan politikadır

img-src: Geçerli görüntü kaynaklarını tanımlar.

Kaynak Değer

'self' - Aynı kaynaktan (aynı şema, ana bilgisayar ve bağlantı noktası) kaynakların yüklenmesine izin verir.

Kullanım: default-src 'self'

'güvenli olmayan satır içi' - Stil özelliği, onclick veya komut dosyası etiketi gövdeleri (uygulandığı kaynağın bağlamına bağlıdır) ve javascript: URI'ler gibi satır içi kaynak öğelerinin kullanımına izin verir.

Kullanım: default-src 'unsafe-inline'

'unsafe-eval' - JavaScript eval () gibi güvenli olmayan dinamik kod değerlendirmesine izin verir

Kullanım: default-src 'unsafe-eval'

data: - Veri şeması aracılığıyla kaynakların yüklenmesine izin verir (örn. Base64 kodlu görüntüler).

Kullanım: img-src 'self' data:

Lütfen içerik güvenliği politikası hakkında daha fazla bilgi için buraya bakın


1
yalnızca satır içi
css'i

Bunun gibi veri bölümünde nesnede bazı svg kullanırsanız <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(gömülü plantuml diyagramı için etkileşimli asciidoctor yay dayanağı dokümantasyonunun sonucu), object-src'yi self olarak ayarlamanız gerekir. Kaçan bildirim: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
harika! docker için de kullanılabilir --env JAVA_OPTS = "..."
smelm

1
vi /etc/default/jenkinsJAVA_ARGS
Ubuntu

14

"Jenkins'i Yönetin" -> "Komut dosyası konsolu" na gidin ve aşağıdaki komutu çalıştırın:

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

3
İkinci parametreyi kithinkmatthew tarafından belirtilen değerlere değiştirdikten sonra bu benim için çalıştı, yaniSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@AndrewMackrodt önerdiğiniz şey benim için işe yarayan tek çözüm (Jenkins'i
CentOS'ta

12

(Aşağıdaki çözüm Windows içindir.)

Kalıcı bir düzeltme, bir satırı değiştirmektir [Jenkins directory]\jenkins.xml(benim için şu anda C:\Jenkins\jenkins.xml)

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

Boşluklarla ayrılmış bağımsız değişkenler listesine aşağıdaki bağımsız değişkeni ekleyin:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Ardından değişikliği almak için Jenkins hizmetini yeniden başlatın.


1
bu benim için çalışan tek cevap, -Dfile.encoding=UTF-8argümanlara da ekledim
Sasha Bond

9

Sen belirtilen harika komutunu kullanarak bu sorunu giderebilirsiniz Vall 'ın cevabı.

Etkisi, Jenkins yeniden başlayana kadar devam eder ve daha sonra bunu tekrar yapmanız gerekir.

Bu sorunu çözmenin bir çözümü, jenkins her başladığında bunu sizin için yapacak bir işi yapılandırmaktır.

Bunu Başlangıç ​​Tetikleme eklentisini kullanarak yapabilirsiniz .

Kurduktan sonra yeni bir iş oluşturun ve Oluşturma Tetikleyicileri bölümünün altında kontrol etmeniz gereken yeni bir onay kutusuna sahip olacaksınız.

Ardından, komutla bir Execute system Groovy komut dosyası oluşturma adımı ekleyin:

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

Kaydet ve her şey çalışmalı.


Bu yöntemle, henüz kurmadıysanız Groovy eklentisini de yüklemeniz gerekir. Aksi takdirde, Execute system Groovy komut dosyası oluşturma adımı, oluşturma seçenekleri arasında gösterilmez.
Bálint Pap

5

Ubuntu 14 sürümü için faydalı özel eklentilerdi:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Jenkins başlangıcında işi başlatmak için

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - System Groovy komut dosyasını çalıştırmak için

Ve Jenkins yeniden başlatıldığında başlayan ve parametre ayarlayan bir iş yaptım.

Jenkins çalıştırıldıktan sonra derlemeye başlayacak

Ve parametreyi ayarlamak için sistem Groovy betiği eklendi. System Groovy komut dosyasını çalıştırın System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


İşin çalıştırılması başarıyla tamamlansa da, raporlarım için CSS görüntüsünü etkinleştirmiyor. "Script Console" da tamamen aynı harika betiği çalıştırdım ve bu iyi çalıştı. Başka ne yapabilirim? Bu işin harika senaryosu, gerçek ebeveyn Jenkin'in mülkünü değiştirmiyor.
frakman1

@ frakman1 şu anda Groovy betiğim şöyle görünüyor - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Ama hepsi bu ve her şey çalışıyor. Belki yönetici kullanıcınız yoktur?
abiab

Cevap için teşekkürler. Sonunda işe yaradım. Bunun yerine bu komut dosyasını kullanmak zorunda kaldım: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

Git

Jenkins'i Yönet -> Komut dosyası konsolu

ve aşağıdaki komutu yazın:

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

ardından Çalıştır'a basın. çıktıyı 'Sonuç' olarak alırsanız, derlemeyi yeniden çalıştırın HTML rapor biçimini kontrol edin


1

Kalıcı olarak ayarlamak için bir Groovy komut dosyası $ JENKINS_HOME / init.groovy veya aşağıdaki içeriğe sahip $ JENKINS_HOME / init.groovy.d / dizininde herhangi bir .groovy dosyası oluşturun :

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'i yeniden başlat

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


1

Jenkins.xml dosyasını açın ve aşağıdaki gibi argümanları kopyalayın. kalıcı olarak düzelecek. Tamamlandığında, makinenizi yeniden başlatın.

<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

On CentOS , solüsyon altında (başka cevap yorumlarında öne sürüldü olan) benim için çalıştı tek:

  1. Şuraya gidin: Jenkins'i Yönet> Düğümleri ve Bulutları Yönetin
  2. Düğümün sağ tarafındaki Dişli simgesine tıklayın (varsayılan olarak Ana adında yalnızca bir Düğüm olacaktır)
  3. Soldaki 'Komut Dosyası Konsolu'nu tıklayın
  4. Konsol penceresine aşağıdakileri girin: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Çalıştıra tıkla
  6. Sonuç bölümünde, aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz:

Komut Dosyası Konsolu Sonucu

Benim özel sorunum Serenity BDD raporlarında resimler / css eksikti. Bu adımları uyguladıktan sonra Serenity raporlarım, bu değişiklikten önce yürütülen derlemelerden gelen raporlar dahil olmak üzere tüm görüntüleri / css'leri düzgün şekilde oluşturuyordu . Bu çözüm, yayınlanmış herhangi bir html tabanlı rapor için de işe yarayacaktır.


0

Cevap vermek için çok geç ama paylaşmayı düşündüm.

Tomcat üzerinde konuşlandırılan Jenkins ile mücadele ediyordum, betiğin yürütülmesini denedim, yardımcı oluyor ama tomcat yeniden başlatılırsa kayboluyor.

Özelliği tomcat içindeki catalina.properties içinde ayarlayarak kalıcı düzeltmeyi yaptı.

Özellikler dosyası: tomcat_installation_dir / conf / catalina.properties Sonunda aşağıdaki satırı catalina.properties içine kopyalayıp yapıştırmanız yeterlidir (mevcut özelliklerle uğraşmamak için istediğiniz yere ayarlayabilirsiniz)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

Ben de jenkins'ime HTTPS ekledikten sonra aynı sorunları yaşadım. Aynı sorunu yaşıyorsanız, çözüm kolaydır - Jenkins URL'nizi HTTP yerine HTTPS protokolünü kullanacak şekilde ayarlayın. Jenkins konfigürasyonu -> jenkins url ile konfigüre edilebilir


0

Jenkins-X kullanıyorsanız sistem özelliğini kalıcı olarak ayarlamak için myvalues.yaml, aşağıdaki içeriğe sahip dosyayı geçerli dizinde oluşturun:

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

Ardından, jenkins-x platformunu yeniden başlatın; bu, onu yükselterek yapılabilir:

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

Platformu gerçekten yükseltmekten kaçınmak için, zorla aynı sürüme yükseltin:

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

0

asciidoctor-maven-pluginAsciidoc dosyasından bir HTML belgesi oluşturmak için eklenti kullananlar , bunu Jenkins'e daha fazla yayınlamak için eklenti yapılandırmasını güncelleyin, linkcssözellik ekleyin :

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

-2

On Debian / Ubuntu , içinde yetenek tesisler :

  • sudo vi /etc/default/jenkins
  • Ekle -Dhudson.model.DirectoryBrowserSupport.CSP=için JAVA_ARGS(örneğin JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Jenkins'i yeniden başlatın - service jenkins restart

Bu benim için yeterliydi, ancak parametrelerin tam listesi için bu yanıta bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.