जेनकिंस सर्वर में रिपोर्ट देखने पर जेनकींस - HTML प्रकाशक प्लगिन - कोई सीएसएस प्रदर्शित नहीं होता है


95

मुझे जेनकिंस HTML प्रकाशक प्लगइन के साथ एक अजीब समस्या है, जिसमें मैंने जो भी फैंसी सीएसएस रिपोर्ट में जोड़ा है उसे जेनकिन्स में देखे जाने पर छीन लिया गया है। यदि मैं स्थानीय को रिपोर्ट डाउनलोड करता हूं, तो मैं सीएसएस प्रारूपण देख पा रहा हूं। जेनकींस में एक सेटिंग है जो सीएसएस को देखने की अनुमति देता है?

जेनकिन्स में मेरी HTML प्रकाशक सेटिंग्स:

यहां छवि विवरण दर्ज करें

जेनकींस में प्रदर्शित होने पर मेरी रिपोर्ट पृष्ठ:

यहां छवि विवरण दर्ज करें

स्थानीय में प्रदर्शित होने पर मेरी रिपोर्ट पृष्ठ:

यहां छवि विवरण दर्ज करें



2
हर कोई कह रहा है कि आप सामग्री सुरक्षा नीति को अक्षम करके इसे "ठीक" कर सकते हैं, बिना किसी विचार के क्यों यह पहली जगह पर है। जो भी निर्माण किए जाने वाले परिवर्तनों को प्रभावित कर सकता है, वह व्यवस्थापक क्रेडेंशियल्स को अपहृत करने और पूरे जेनकींस क्लस्टर तक पहुंच प्राप्त करने में सक्षम होगा। जबकि इनलाइन सीएसएस ज्यादातर सुरक्षित है यदि आप सावधान हैं, तो स्क्रिप्ट की अनुमति देना एक आपदा है।
ऑरेंजडॉग

जवाबों:


179

समस्या का पता लगाया। अन्य उपयोगकर्ताओं के लिए यहां साझा करना।

जेनकिन्स में कंटेंट सिक्योरिटी पॉलिसी की वजह से सीएसएस को छीन लिया गया है। ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

डिफ़ॉल्ट नियम इसके लिए सेट है:

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

इस नियम के परिणाम निम्नलिखित हैं:

  • किसी भी जावास्क्रिप्ट को अनुमति नहीं है
  • कोई प्लगइन्स (ऑब्जेक्ट / एम्बेड) की अनुमति नहीं है
  • किसी अन्य साइट से सीएसएस, या सीएसएस की अनुमति नहीं है
  • अन्य साइटों से कोई चित्र की अनुमति नहीं है
  • कोई फ्रेम की अनुमति नहीं है
  • किसी वेब फोंट की अनुमति नहीं है
  • कोई XHR / AJAX की अनुमति नहीं है, आदि।

इस नियम को शिथिल करने के लिए, पर जाएँ

  1. जेनकिंस-> प्रबंधित करें
  2. नोड्स प्रबंधित करें->
  3. सेटिंग्स (गियर आइकन) -> पर क्लिक करें
  4. बाईं ओर स्क्रिप्ट कंसोल क्लिक करें और निम्न कमांड टाइप करें:

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

और प्रेस चलाएँ। यदि आप आउटपुट को 'रिजल्ट:' के नीचे "रिजल्ट" हेडर के रूप में देखते हैं तो सुरक्षा अक्षम है। अपने बिल्ड को फिर से चलाएं और आप देख सकते हैं कि नई HTML फ़ाइलें संग्रहीत सीएसएस सक्षम होंगी।


1
धन्यवाद!!! यह वास्तव में मुझे इस css मुद्दे को हल करने में मदद करता है जो मैंने जेनकिंस के साथ किया था।
इयाल सुलेमान

1
@Steerpike मुझे आश्चर्य है कि आपका क्या मतलब है और फिर पता चला कि जेनकींस को फिर से शुरू करने पर सीएसएस को अवरुद्ध कर दिया गया था। इसलिए मैंने जेनकिन्स जॉब बनाई जो हर 12 घंटे में कमांड चलाता है। चालबाजी करने लगता है।
एरोफर

@Aeropher आपको धन्यवाद - मैं जेनकिंस नौसिखिया हूं - मैं उस नौकरी को कैसे सेटअप करूं? Windows बैच कमांड के निर्माण के चरण के साथ एक सामान्य नौकरी सेट करें?
Steerpike

3
@Steerpike यह सही है सिवाय इसके कि यह एक ग्रूवी कमांड है, इसलिए आपको इसे "एक्सेक्यूट सिस्टम ग्रूवी स्क्रिप्ट" बिल्ड स्टेप में निष्पादित करने की आवश्यकता है। और फिर "बिल्ड ट्रिगर्स" सेक्शन के तहत मैंने "वैल्यू
टाइमली

दरअसल, आपको अपने निर्माण को फिर से चलाने की जरूरत नहीं है। बस जेनकेन से जेनरेट किए गए HTML को फिर से लोड करें और यह पॉलिसी परिवर्तन का प्रभाव लेगा।
20

24

में CentOS , एचटीएमएल रिपोर्ट में छवियों को सक्षम करने के लिए

  • 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 : डिफ़ॉल्ट सामग्री s JavaScript, Images, CSS, फ़ॉन्ट्स, AJAX अनुरोधों, फ्रेम्स, HTML5 मीडिया जैसी सामग्री लोड करने के लिए डिफ़ॉल्ट नीति है

img-src: छवियों के वैध स्रोतों को परिभाषित करता है।

स्रोत मूल्य

'स्व' - एक ही मूल (समान योजना, होस्ट और पोर्ट) से संसाधनों को लोड करने की अनुमति देता है।

उपयोग: default-src 'self'

'असुरक्षित-इनलाइन' - इनलाइन स्रोत तत्वों जैसे शैली विशेषता, ऑन्ग्लिक, या स्क्रिप्ट टैग निकायों के उपयोग की अनुमति देता है (यह जिस स्रोत पर लागू होता है उसके संदर्भ पर निर्भर करता है) और जावास्क्रिप्ट: यूआरआई।

उपयोग: default-src 'unsafe-inline'

'असुरक्षित-eval' - जावास्क्रिप्ट eval () के रूप में असुरक्षित गतिशील कोड मूल्यांकन की अनुमति देता है

उपयोग: default-src 'unsafe-eval'

डेटा: - डेटा योजना के माध्यम से संसाधनों को लोड करने की अनुमति देता है (जैसे बेस 64 एन्कोडेड चित्र)।

उपयोग: img-src 'self' data:

कृपया सामग्री सुरक्षा नीति के बारे में अधिक जानकारी यहाँ देखें


1
आपको केवल इनलाइन सीएसएस को सक्षम करना चाहिए, और इन सभी अन्य असुरक्षित चीजों को नहीं
ऑरेंजडॉग

यदि आप इस तरह से डेटा भाग में ऑब्जेक्ट में कुछ svg का उपयोग करते हैं <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></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'\'';"'
लुबो

1
महान! डॉकटर के लिए भी इस्तेमाल किया जा सकता है --env JAVA_OPTS = "..."
smelm

1
मेरे ubuntu स्थापना के लिए मैं vi /etc/default/jenkinsचर के साथ इस्तेमाल कियाJAVA_ARGS
mRyan

15

"प्रबंधित जेनकींस" पर जाएं -> "स्क्रिप्ट कंसोल" और कमांड के नीचे चलाएं:

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

3
किथिन्कमट्टू द्वारा उल्लिखित मानों के लिए दूसरे पैराम को संशोधित करने के बाद यह मेरे लिए काम करता है, अर्थातSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
एंड्रयू मैकड्रॉड

@AndrewMackrodt आपने जो सुझाव दिया, वह एकमात्र समाधान है जिसने मेरे लिए काम किया है (मैं CentOS पर जेनकिंस चला रहा हूं)
lax1089

13

(निम्न समाधान विंडोज के लिए है।)

एक स्थाई निर्धारण में एक लाइन को बदलना है [Jenkins directory]\jenkins.xml(मेरे लिए यह है C:\Jenkins\jenkins.xml)

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

निम्नलिखित तर्क को व्हाट्सएप द्वारा अलग किए गए तर्कों की सूची में जोड़ें:

-Dhudson.model.DirectoryBrowserSupport.CSP=

फिर परिवर्तन लेने के लिए जेनकिन्स सेवा को फिर से शुरू करें।


1
यह मेरे लिए एकमात्र काम करने वाला उत्तर है, मैंने -Dfile.encoding=UTF-8तर्क में भी जोड़ा
साशा बॉन्ड

9

आप इसे वूल के उत्तर में दिए गए ग्रूवी कमांड का उपयोग करके ठीक कर सकते हैं ।

प्रभाव तब तक होता है जब तक जेनकिंस पुनः शुरू नहीं होता है और बाद में आपको इसे फिर से करना होगा।

इस समस्या को हल करने के लिए एक नौकरी को कॉन्फ़िगर करना है जो कि जब भी जेनकिंस शुरू होता है तो यह आपके लिए करेगा।

आप स्टार्टअप ट्रिगर प्लगइन का उपयोग करके ऐसा कर सकते हैं ।

आपके द्वारा इसे स्थापित करने के बाद यह एक नया कार्य बनाता है और आपके पास बिल्ड ट्रिगर अनुभाग के तहत एक नया चेकबॉक्स होगा जिसे आपको जांचना होगा।

फिर कमांड के साथ एक्सक्यूट सिस्टम ग्रूवी स्क्रिप्ट बिल्ड स्टेप जोड़ें:

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

बचाओ और सब कुछ काम करना चाहिए।


इस विधि के साथ, आपको ग्रूवी प्लगइन को भी स्थापित करना होगा, यदि आपके पास पहले से नहीं था। अन्यथा, Execute सिस्टम Groovy स्क्रिप्ट बिल्ड स्टेप बिल्ड विकल्पों में नहीं दिखाई देगा।
बाग्लिंट पैप

5

Ubuntu 14 संस्करण के लिए उपयोगी था विशेष प्लगइन्स:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - जेनकिंस स्टार्टअप पर नौकरी शुरू करने के लिए

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - सिस्टम ग्रूवी स्क्रिप्ट चलाने के लिए

और मैंने एक नौकरी की, जो कि जेनकिंस पर शुरू होती है और पैरामर सेट करती है।

जेनकिंस के चलने के बाद निर्माण शुरू करने के लिए तैयार

और पैराट्रम सेट करने के लिए सिस्टम ग्रूवी स्क्रिप्ट को जोड़ा। सिस्टम ग्रूवी स्क्रिप्ट चलाएँ System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';";


हालांकि काम चलाना सफलतापूर्वक पूरा हो जाता है, लेकिन यह मेरी रिपोर्ट के लिए सीएसएस प्रदर्शन को सक्षम नहीं करता है। मैंने "स्क्रिप्ट कंसोल" में ठीक उसी ग्रूवी स्क्रिप्ट को चलाया और यह ठीक काम किया। मैं और क्या कर सकता हुँ? इस नौकरी की ग्रूवी स्क्रिप्ट वास्तविक माता-पिता जेनकिन की संपत्ति को नहीं बदल रही है।
frakman1

@ frakman1 इस समय मेरी Groovy स्क्रिप्ट इस तरह दिखती है - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") लेकिन यह सब कुछ और सब कुछ काम करता है। शायद आपके पास व्यवस्थापक उपयोगकर्ता नहीं है?
अबीब ab ’

जवाब देने के लिए धन्यवाद। मुझे अंततः यह काम करने के लिए मिला। मुझे इस स्क्रिप्ट का उपयोग करना था: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

2

के लिए जाओ

जेनकिंस प्रबंधित करें -> स्क्रिप्ट कंसोल

और निम्न कमांड में टाइप करें:

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

उसके बाद प्रेस रन। यदि आपको 'परिणाम' के रूप में आउटपुट मिलता है, तो बिल्ड को HTML रिपोर्ट प्रारूप की जाँच करें


1

स्थायी रूप से सेटिंग के लिए एक Groovy स्क्रिप्ट फ़ाइल $ JENKINS_HOME / init.groovov , या निर्देशिका में कोई भी .groovy फ़ाइल $ JENKINS_HOME / init.groovat.d.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. पर जाएं: जेनकींस प्रबंधित करें> नोड्स और बादल प्रबंधित करें
  2. नोड के लिए दाईं ओर स्थित गियर आइकन पर क्लिक करें (डिफ़ॉल्ट रूप से केवल एक नोड होगा जिसे मास्टर कहा जाता है)
  3. बाईं ओर 'स्क्रिप्ट कंसोल' पर क्लिक करें
  4. कंसोल विंडो में निम्न दर्ज करें: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. रन पर क्लिक करें
  6. आपको स्क्रीनशॉट के समान परिणाम अनुभाग में कुछ आउटपुट देखना चाहिए:

स्क्रिप्ट कंसोल परिणाम

मेरा विशेष मुद्दा Serenity BDD रिपोर्ट में चित्र / सीएसएस गायब था। इन चरणों को करने के बाद मेरी Serenity रिपोर्ट में सभी चित्र / सीएसएस रेंडरिंग ठीक से थी, जिसमें उन बिल्ड्स की रिपोर्टें शामिल थीं, जिन्होंने इस परिवर्तन से पहले निष्पादित किया था । यह समाधान किसी भी प्रकाशित html- आधारित रिपोर्ट के लिए भी काम करेगा।


0

इसका जवाब देने में बहुत देर हो गई, लेकिन साझा करने के लिए सोचा।

मैं टॉमकैट पर तैनात जेनकिंस के साथ संघर्ष कर रहा था, स्क्रिप्ट के निष्पादन की कोशिश की, यह मदद करता है लेकिन अगर टॉमकैट को रिबूट किया जाता है तो वह दूर चला जाता है।

संपत्ति को संप्रदाय में सेट करके स्थाई निर्धारण किया।

गुण फ़ाइल: tomcat_installation_dir / conf / catalina.properties बस आखिरी पंक्ति में उत्प्रेरित में नीचे कॉपी पेस्ट करें। अंतिम में (आप मौजूदा गुणों के साथ गड़बड़ नहीं करने के लिए इसे कहीं भी सेट कर सकते हैं)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

HTTPS को अपने जेनकींस में जोड़ने के बाद मेरे पास समान मुद्दे थे। यदि आपके पास एक ही समस्या है, तो समाधान आसान है - HTTP के बजाय HTTPS प्रोटोकॉल का उपयोग करने के लिए अपने जेनकींस यूआरएल को सेट करें। इसे जेनकिंस कॉन्फ़िगरेशन -> जेनकिंस यूआरएल के माध्यम से कॉन्फ़िगर किया जा सकता है


0

सिस्टम संपत्ति को स्थायी रूप से सेट करने के लिए यदि जेनकिन्स-एक्स का उपयोग कर रहे हैं , तो myvalues.yamlवर्तमान निर्देशिका में निम्न सामग्री के साथ फाइल बनाएं :

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

फिर जेनकिंस-एक्स प्लेटफॉर्म को फिर से शुरू करें, जिसे अपग्रेड करके किया जा सकता है:

$ 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-pluginJenkins को प्रकाशित करने के लिए asciidoc फाइल से HTML डॉक्यूमेंट बनाने के लिए प्लगइन का उपयोग कर रहे हैं , उनके लिए प्लगइन कॉन्फ़िगरेशन को अपडेट करें, linkcssविशेषता जोड़ें :

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

-1

पर Debian / Ubuntu के , में योग्यता प्रतिष्ठानों :

  • sudo vi /etc/default/jenkins
  • जोड़े -Dhudson.model.DirectoryBrowserSupport.CSP=को JAVA_ARGS(जैसे JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • जेनकींस को फिर से शुरू करें - service jenkins restart

मेरे लिए यह पर्याप्त था, लेकिन मापदंडों की पूरी सूची के लिए यह उत्तर देखें ।


यह क्यों ठुकराया गया है?
जॉर्ज प्लिगोपोपोल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.