Jenkins - HTML Publisher Plugin - ไม่มีการแสดง CSS เมื่อมีการดูรายงานใน Jenkins Server


92

ฉันมีปัญหาแปลก ๆ กับปลั๊กอิน Jenkins HTML Publisher ซึ่ง CSS แฟนซีทั้งหมดที่ฉันเพิ่มลงในรายงานจะถูกตัดออกเมื่อดูใน Jenkins หากฉันดาวน์โหลดรายงานเป็นแบบโลคัลฉันจะเห็นการจัดรูปแบบ CSS มีการตั้งค่าใน Jenkins ที่อนุญาตให้ดู CSS หรือไม่?

การตั้งค่าผู้เผยแพร่ HTML ของฉันใน Jenkins:

ป้อนคำอธิบายภาพที่นี่

หน้ารายงานของฉันเมื่อแสดงใน Jenkins:

ป้อนคำอธิบายภาพที่นี่

หน้ารายงานของฉันเมื่อแสดงใน Local:

ป้อนคำอธิบายภาพที่นี่



2
ทุกคนบอกว่าคุณ "แก้ไข" โดยการปิดใช้งานนโยบายความปลอดภัยของเนื้อหาโดยไม่คิดว่าทำไมจึงเป็นเช่นนั้นตั้งแต่แรก ใครก็ตามที่สามารถส่งผลต่อการเปลี่ยนแปลงที่จะสร้างขึ้นจะสามารถขโมยข้อมูลรับรองของผู้ดูแลระบบและเข้าถึงคลัสเตอร์ Jenkins ทั้งหมดได้ ในขณะที่ inline css ส่วนใหญ่ปลอดภัยหากคุณระมัดระวังการอนุญาตให้สคริปต์เป็นหายนะ
OrangeDog

คำตอบ:


175

พบปัญหา แบ่งปันที่นี่สำหรับผู้ใช้รายอื่น

CSS ถูกตัดออกเนื่องจากนโยบายความปลอดภัยของเนื้อหาใน Jenkins ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

กฎเริ่มต้นถูกตั้งค่าเป็น:

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

ชุดกฎนี้ส่งผลดังต่อไปนี้:

  • ไม่อนุญาตให้ใช้ JavaScript เลย
  • ไม่อนุญาตให้ใช้ปลั๊กอิน (วัตถุ / ฝัง)
  • ไม่อนุญาต CSS แบบอินไลน์หรือ CSS จากไซต์อื่น ๆ
  • ไม่อนุญาตภาพจากไซต์อื่น ๆ
  • ไม่อนุญาตให้ใช้เฟรม
  • ไม่อนุญาตแบบอักษรของเว็บ
  • ไม่อนุญาต XHR / AJAX ฯลฯ

หากต้องการผ่อนคลายกฎนี้ให้ไปที่

  1. จัดการ Jenkins->
  2. จัดการโหนด ->
  3. คลิกการตั้งค่า (ไอคอนรูปเฟือง) ->
  4. คลิกคอนโซลสคริปต์ทางด้านซ้ายและพิมพ์คำสั่งต่อไปนี้:

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

แล้วกด Run หากคุณเห็นผลลัพธ์เป็น "ผลลัพธ์:" ด้านล่างส่วนหัว "ผลลัพธ์" แสดงว่าการป้องกันถูกปิดใช้งาน เรียกใช้งานบิวด์ของคุณอีกครั้งและคุณจะเห็นว่าไฟล์ HTML ใหม่ที่เก็บถาวรจะเปิดใช้งาน CSS


1
ขอบคุณ!!! มันช่วยฉันแก้ปัญหา css นี้กับเจนกินส์ได้จริงๆ
Eyal Sooliman

1
@Steerpike ฉันสงสัยว่าคุณหมายถึงอะไรและพบว่า css ถูกบล็อกเมื่อรีสตาร์ทเจนกินส์ ดังนั้นฉันจึงสร้างงานเจนกินส์ที่รันคำสั่งทุกๆ 12 ชั่วโมง ดูเหมือนจะทำเคล็ดลับ
Aeropher

@Aeropher ขอบคุณ - ฉันเป็นมือใหม่เจนกินส์ - ฉันจะตั้งค่างานนั้นได้อย่างไร? ตั้งค่างานทั่วไปด้วย Build Step of Execute Windows Batch Command?
Steerpike

3
@Steerpike ถูกต้องยกเว้นว่ามันเป็นคำสั่งที่ไม่ซับซ้อนดังนั้นคุณต้องดำเนินการในขั้นตอนการสร้าง "Execute system Groovy Script" จากนั้นในส่วน "Build Triggers" ฉันเลือก "Build Periodically" ด้วยค่านี้: H 12 * * *
Aeropher

จริงๆแล้วคุณไม่จำเป็นต้องรีรันงานสร้างของคุณใหม่ เพียงโหลด HTML ที่สร้างขึ้นจาก Jenkins ซ้ำและจะมีผลจากการเปลี่ยนแปลงนโยบาย
hshib

23

ในCentOsเพื่อเปิดใช้งานรูปภาพในรายงาน html

  • sudo vi /etc/sysconfig/jenkins
  • ตั้งค่าต่อไปนี้ใน 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:;\""

สิ่งนี้จะใช้ได้แม้หลังจากรีสตาร์ทเซิร์ฟเวอร์ของเจนกินส์แล้ว


คำสั่ง

default-src : default-src เป็นนโยบายเริ่มต้นสำหรับการโหลดเนื้อหาเช่น JavaScript, รูปภาพ, CSS, แบบอักษร, คำขอ AJAX, Frames, HTML5 Media

img-src: กำหนดแหล่งที่มาของภาพที่ถูกต้อง

ค่าแหล่งที่มา

'self' - อนุญาตให้โหลดทรัพยากรจากแหล่งกำเนิดเดียวกัน (โครงร่างโฮสต์และพอร์ตเดียวกัน)

การใช้งาน: default-src 'self'

'ไม่ปลอดภัย-inline' - อนุญาตให้ใช้องค์ประกอบที่มาแบบอินไลน์เช่น style attribute, onclick หรือ script tag body (ขึ้นอยู่กับบริบทของแหล่งที่มาที่ใช้) และ javascript: URI

การใช้งาน: default-src 'unsafe-inline'

'unsafe-eval' - อนุญาตให้มีการประเมินโค้ดแบบไดนามิกที่ไม่ปลอดภัยเช่น JavaScript eval ()

การใช้งาน: default-src 'unsafe-eval'

ข้อมูล: - อนุญาตให้โหลดทรัพยากรผ่านโครงร่างข้อมูล (เช่นภาพที่เข้ารหัส Base64)

การใช้งาน: img-src 'self' data:

โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายความปลอดภัยของเนื้อหาที่นี่


1
คุณควรเปิดใช้งาน inline css เท่านั้นไม่ใช่สิ่งที่ไม่ปลอดภัยอื่น ๆ ทั้งหมด
OrangeDog

หากคุณใช้ svg บางส่วนใน object ในส่วนข้อมูลเช่นนี้<object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(ผลลัพธ์ของเอกสารประกอบสปริงส่วนที่เหลือของ asciidoctor แบบโต้ตอบสำหรับแผนภาพ plantuml แบบฝัง) คุณจะต้องตั้งค่า object-src เป็นตัวเอง แจ้งหนี: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
เยี่ยมมาก! สามารถใช้สำหรับนักเทียบท่าได้เช่นกันกับ --env JAVA_OPTS = "... "
smelm

1
สำหรับการติดตั้ง Ubuntu ของฉันฉันใช้vi /etc/default/jenkinsกับตัวแปรJAVA_ARGS
mRyan

14

ไปที่“ Manage Jenkins” ->“ Script console” และเรียกใช้คำสั่งด้านล่าง:

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

3
หลังจากแก้ไขพารามิเตอร์ที่สองเป็นค่าที่กล่าวถึงโดย kithinkmatthew สิ่งนี้ใช้ได้ผลกับฉันเช่นSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@AndrewMackrodt สิ่งที่คุณแนะนำคือทางออกเดียวที่ใช้ได้ผลสำหรับฉัน (ฉันใช้งาน Jenkins บน CentOS)
lax1089

13

(โซลูชันต่อไปนี้ใช้สำหรับ Windows)

การแก้ไขถาวรคือการเปลี่ยนบรรทัดใน[Jenkins directory]\jenkins.xml(สำหรับฉันมันอยู่ที่C:\Jenkins\jenkins.xml)

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

เพิ่มอาร์กิวเมนต์ต่อไปนี้ในรายการอาร์กิวเมนต์ที่คั่นด้วยช่องว่าง:

-Dhudson.model.DirectoryBrowserSupport.CSP=

จากนั้นเริ่มบริการ Jenkins ใหม่เพื่อรับการเปลี่ยนแปลง


1
นั่นเป็นคำตอบเดียวที่ใช้ได้ผลสำหรับฉันฉันยังเพิ่ม-Dfile.encoding=UTF-8ข้อโต้แย้งด้วย
Sasha Bond

9

คุณสามารถแก้ไขปัญหานี้ได้โดยใช้คำสั่ง groovy ตามที่ระบุไว้ในคำตอบของVall

เอฟเฟกต์อยู่ในสถานที่จนกว่าเจนกินส์จะรีสตาร์ทและหลังจากนั้นคุณต้องทำอีกครั้ง

วิธีแก้ปัญหานี้คือกำหนดค่างานที่จะทำเพื่อคุณทุกครั้งที่เจนกินส์เริ่มทำงาน

คุณสามารถทำได้โดยใช้ปลั๊กอินเริ่มต้นทริกเกอร์

หลังจากคุณติดตั้งแล้วให้สร้างงานใหม่และคุณจะมีช่องทำเครื่องหมายใหม่ในส่วนBuild Triggersที่คุณจะต้องตรวจสอบ

จากนั้นเพิ่มขั้นตอนการสร้างสคริปต์ Groovy ของระบบ Execute ด้วยคำสั่ง:

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

บันทึกและทุกอย่างควรใช้งานได้


ด้วยวิธีนี้คุณต้องติดตั้งปลั๊กอิน Groovy ด้วยหากคุณยังไม่มี มิฉะนั้นขั้นตอนการสร้างสคริปต์ Groovy ของ Execute system จะไม่ปรากฏขึ้นระหว่างตัวเลือกการสร้าง
Bálint Pap

5

สำหรับ Ubuntu 14 เวอร์ชันที่เป็นประโยชน์คือปลั๊กอินพิเศษ:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - เพื่อเริ่มงานในการเริ่มต้นเจนกินส์

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - ในการเรียกใช้สคริปต์ System Groovy

และฉันก็ได้งานที่เริ่มจากเจนกินส์รีสตาร์ทและตั้งค่าพารามิเตอร์

ตั้งค่าให้เริ่มสร้างหลังจาก Jenkins ถูกเรียกใช้

และเพิ่มสคริปต์ Groovy ของระบบเพื่อตั้งค่าพารามิเตอร์ เรียกใช้สคริปต์ System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


แม้ว่าการเรียกใช้งานจะเสร็จสมบูรณ์ แต่ก็ไม่ได้เปิดใช้งานการแสดง CSS สำหรับรายงานของฉัน ฉันเรียกใช้สคริปต์ groovy เดียวกันทั้งหมดใน "Script Console" และทำงานได้ดี ฉันจะทำอะไรได้อีก? สคริปต์ที่น่าสนใจของงานนี้ไม่ได้เปลี่ยนคุณสมบัติของ Jenkin ผู้ปกครองที่แท้จริง
frakman1

@ frakman1 ในขณะนี้สคริปต์ Groovy ของฉันมีลักษณะเช่นนี้ - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") แต่นั่นคือทั้งหมดและทุกอย่างใช้งานได้ บางทีคุณอาจไม่มีผู้ดูแลระบบ?
abiab

ขอบคุณสำหรับการตอบรับ ในที่สุดฉันก็ใช้งานได้ ฉันต้องใช้สคริปต์นี้แทน: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

ไปที่

จัดการ Jenkins -> คอนโซลสคริปต์

และพิมพ์คำสั่งต่อไปนี้:

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

จากนั้นกด Run หากคุณได้ผลลัพธ์เป็น 'ผลลัพธ์' ให้รันบิลด์อีกครั้งตรวจสอบรูปแบบรายงาน HTML


1

สำหรับการตั้งค่าอย่างถาวรให้สร้างไฟล์สคริปต์ Groovy $ JENKINS_HOME / init.groovyหรือไฟล์. groovyใด ๆในไดเร็กทอรี$ JENKINS_HOME / init.groovy.d /ด้วยเนื้อหาต่อไปนี้:

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

systemctl รีสตาร์ทเจนกินส์

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


1

เปิดไฟล์ jenkins.xml และคัดลอกอาร์กิวเมนต์ด้านล่าง มันจะแก้ไขอย่างถาวร เมื่อเสร็จแล้วรีสตาร์ทเครื่องของคุณ

<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

บนCentOSวิธีแก้ปัญหาด้านล่าง (ซึ่งแนะนำในความคิดเห็นของคำตอบอื่น) เป็นวิธีเดียวที่ได้ผลสำหรับฉัน:

  1. ไปที่: จัดการ Jenkins> จัดการโหนดและคลาวด์
  2. คลิกไอคอนรูปเฟืองทางด้านขวามือสำหรับโหนด (โดยค่าเริ่มต้นจะมีเพียงโหนดเดียวที่เรียกว่า Master)
  3. คลิก 'Script Console' ทางด้านซ้าย
  4. ป้อนสิ่งต่อไปนี้ในหน้าต่างคอนโซล: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. คลิกเรียกใช้
  6. คุณควรเห็นผลลัพธ์บางอย่างในส่วนผลลัพธ์ซึ่งคล้ายกับภาพหน้าจอด้านล่าง:

ผลลัพธ์ของคอนโซลสคริปต์

ปัญหาเฉพาะของฉันคือไม่มีภาพ / css ในรายงาน Serenity BDD หลังจากทำตามขั้นตอนเหล่านี้รายงาน Serenity ของฉันมีการแสดงภาพ / css ทั้งหมดอย่างถูกต้องรวมถึงรายงานจากรุ่นที่ดำเนินการก่อนการเปลี่ยนแปลงนี้ โซลูชันนี้จะใช้ได้กับรายงานที่ใช้ HTML ที่เผยแพร่


0

สายเกินไปที่จะตอบกลับ แต่คิดที่จะแบ่งปัน

ฉันกำลังดิ้นรนกับ Jenkins ที่ติดตั้งบน Tomcat ลองเรียกใช้สคริปต์มันช่วยได้ แต่จะหายไปถ้า Tomcat ถูกรีบูต

ทำการแก้ไขถาวรโดยตั้งค่าคุณสมบัติใน catalina.properties ใน tomcat

ไฟล์คุณสมบัติ: tomcat_installation_dir / conf / catalina.properties เพียงคัดลอกและวางบรรทัดด้านล่างใน catalina.properties ท้ายสุด (คุณสามารถตั้งค่าได้ทุกที่เพื่อไม่ให้ยุ่งกับคุณสมบัติที่มีอยู่)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

ฉันมีปัญหาเดียวกันหลังจากเพิ่ม HTTPS ในเจนกินส์ของฉัน ในกรณีที่คุณประสบปัญหาเดียวกันวิธีแก้ปัญหานั้นง่ายมากตั้งค่า Jenkins url ของคุณให้ใช้โปรโตคอล HTTPS แทน HTTP สามารถกำหนดค่าผ่าน jenkins configuration -> jenkins url


0

หากต้องการตั้งค่าคุณสมบัติของระบบอย่างถาวรหากใช้Jenkins-Xให้สร้างไฟล์myvalues.yamlในไดเร็กทอรีปัจจุบันโดยมีเนื้อหาต่อไปนี้:

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

จากนั้นรีสตาร์ทแพลตฟอร์ม jenkins-x ซึ่งสามารถทำได้โดยการอัพเกรด:

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

เพื่อหลีกเลี่ยงการอัปเกรดแพลตฟอร์มจริงเพียงแค่บังคับให้อัปเกรดเป็นเวอร์ชันเดียวกัน:

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

0

สำหรับผู้ที่ใช้asciidoctor-maven-pluginปลั๊กอินสร้างเอกสาร HTML จากไฟล์ asciidoc เพื่อเผยแพร่ต่อไปยัง Jenkins ให้อัปเดตการกำหนดค่าปลั๊กอินเพิ่มlinkcssแอตทริบิวต์:

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

-2

บนDebian / Ubuntuในการติดตั้ง aptitude :

  • sudo vi /etc/default/jenkins
  • เพิ่ม-Dhudson.model.DirectoryBrowserSupport.CSP=ในJAVA_ARGS(เช่นJAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • รีสตาร์ทเจนกินส์ - service jenkins restart

นี่ก็เพียงพอแล้วสำหรับฉัน แต่สำหรับรายการพารามิเตอร์ทั้งหมดโปรดดูคำตอบนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.