簡體   English   中英

"Jenkins - HTML Publisher Plugin - 在 Jenkins Server 中查看報告時不顯示 CSS"

[英]Jenkins - HTML Publisher Plugin - No CSS is displayed when report is viewed in Jenkins Server

我對 Jenkins HTML Publisher 插件有一個奇怪的問題,在 Jenkins 中查看時,我添加到報告中的所有花哨的 CSS 都被刪除了。 如果我將報告下載到本地,我可以看到 CSS 格式。 Jenkins 中是否有允許查看 CSS 的設置?

我在 Jenkins 中的 HTML Publisher 設置:

在此處輸入圖像描述

在 Jenkins 中顯示的我的報告頁面:

在此處輸入圖像描述

我的報告頁面在本地顯示時:

在此處輸入圖像描述

想通了這個問題。 在這里分享給其他用戶。

由於 Jenkins 中的內容安全策略,CSS 被剝離。 ( 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. 管理詹金斯->
  2. 管理節點->
  3. 點擊設置(齒輪圖標)->
  4. 單擊左側的腳本控制台並輸入以下命令:

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

並按運行。 如果您在“結果”標題下方看到輸出為“結果:”,則保護被禁用。 重新運行您的構建,您可以看到存檔的新 HTML 文件將啟用 CSS。

CentOs 中,啟用 html 報告中的圖像

  • sudo vi /etc/sysconfig/jenkins
  • JENKINS_JAVA_OPTION設置以下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:;\\""

即使在重新啟動 jenkins 的服務器后,這也將起作用。


指示

default-src : default-src 是加載內容的默認策略,如 JavaScript、圖像、CSS、字體、AJAX 請求、框架、HTML5 媒體

img-src:定義有效的圖像來源。

來源價值

' self ' -允許從相同的來源(相同的方案、主機和端口)加載資源。

用法: default-src 'self'

' unsafe-inline ' -允許使用內聯源元素,例如 style 屬性、onclick 或腳本標記主體(取決於應用它的源的上下文)和 javascript: URI。

用法: default-src 'unsafe-inline'

' unsafe-eval ' -允許不安全的動態代碼評估,例如 JavaScript eval()

用法: default-src 'unsafe-eval'

數據: -允許通過數據方案加載資源(例如 Base64 編碼圖像)。

用法: img-src 'self' data:

在此處參考有關內容安全政策的更多信息

轉到“管理詹金斯”->“腳本控制台”並運行以下命令:

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

(以下解決方案適用於 Windows。)

永久修復是更改[Jenkins directory]\\jenkins.xml (對我來說它在C:\\Jenkins\\jenkins.xml

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

將以下參數添加到以空格分隔的參數列表中:

-Dhudson.model.DirectoryBrowserSupport.CSP=

然后重新啟動 Jenkins 服務以獲取更改。

您可以使用Vall的回答中指定的 groovy 命令來解決此問題。

效果會一直存在,直到 Jenkins 重新啟動,之后您必須再次執行此操作。

解決此問題的一個解決方案是配置一個作業,該作業將在 jenkins 啟動時為您執行此操作。

您可以使用Startup Trigger 插件來完成此操作。

安裝后創建一個新作業,您將在Build Triggers部分下有一個新復選框,您必須檢查該復選框。

然后使用以下命令添加執行系統 ​​Groovy 腳本構建步驟:

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

保存,一切都應該工作。

對於 Ubuntu 14 版本有用的是特殊插件:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - 在 jenkins 啟動時開始工作

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - 運行系統 Groovy 腳本

我做了一份工作,從 Jenkins 重啟開始並設置參數。

設置在運行 Jenkins 后開始構建

並添加了系統 Groovy 腳本來設置參數。 運行系統 Groovy 腳本 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")

CentOS 上,以下解決方案(在另一個答案的評論中建議)是唯一對我有用的解決方案:

  1. 轉到:管理 Jenkins > 管理節點和雲
  2. 單擊節點右側的齒輪圖標(默認情況下只有一個節點稱為主節點)
  3. 單擊左側的“腳本控制台”
  4. 在控制台窗口中輸入以下內容: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. 點擊運行
  6. 您應該在 Result 部分看到一些輸出,類似於下面的截圖:

腳本控制台結果

我的特殊問題是 Serenity BDD 報告中缺少圖像/css。 執行這些步驟后,我的 Serenity 報告已正確呈現所有圖像/CSS,包括此更改之前執行的構建報告。 此解決方案也適用於任何已發布的基於 html 的報告。

管理 Jenkins --> 腳本控制台

並輸入以下命令:

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

然后按運行。 如果輸出為“結果”,則重新運行構建檢查 HTML 報告格式

為了設置永久創建一個 Groovy 腳本文件$JENKINS_HOME/init.groovy ,或目錄$JENKINS_HOME/init.groovy.d/中的任何.groovy文件,其內容如下:

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

打開 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

現在回復為時已晚,但想分享。

我正在努力與部署在 Tomcat 上的 Jenkins 做斗爭,嘗試執行腳本,如果重新啟動 tomcat,它會有所幫助,但它會消失。

通過在 tomcat 中設置 catalina.properties 中的屬性進行永久修復。

屬性文件:tomcat_installation_dir/conf/catalina.properties 最后復制粘貼下面這行在 catalina.properties 中(你可以在任何地方設置它只是為了不干擾現有的屬性)

-Dhudson.model.DirectoryBrowserSupport.CSP=""

如果使用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

將 HTTPS 添加到我的 jenkins 后,我遇到了同樣的問題。 如果您遇到同樣的問題,解決方案很簡單 - 將您的 Jenkins url 設置為使用 HTTPS 協議而不是 HTTP。 可以通過 jenkins configuration -> jenkins url 進行配置

對於那些使用asciidoctor-maven-plugin插件從 asciidoc 文件生成 HTML 文檔以進一步發布到 Jenkins 的人,更新插件配置,添加linkcss屬性:

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

我們有一個更簡單的解決方案。 除非你真的堅持使用 HTML 報告,否則你可以只使用警告 NG 插件(無論如何這是一個好主意):

https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md

我們將它用於 CodeNarc (Groovy),但也用於 Checkstyle、PMD、SpotBugs 和 Java 警告 (Java)。

我知道這很舊,但這對我來說非常有用,這似乎是 Jenkins 文檔中推薦的。 我只是將資源根設置為從同一位置提供的不同 url。

“強烈建議設置資源根 URL,而不是自定義 Content-Security-Policy。下面的大部分文檔都是在首次引入 Content-Security-Policy 時編寫的,並保留以供無法設置 Jenkins 的管理員使用提供來自不同域的用戶內容。”

  1. 在 MacOS 中,Jenkins 運行一個服務,該服務需要在$JENKINS_HOME/init.groovy.d中創建一個 groovy 腳本

  2. 調用startup-properties.groovy和代碼:

    import jenkins.model.Jenkins import java.util.logging.LogManager /* Jenkins 主目錄/ def jenkinsHome = Jenkins.instance.getRootDir().absolutePath def logger = LogManager.getLogManager().getLogger("") /替換密鑰和要設置的值的值。 // System.setProperty(key, value) */ System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "") logger.info("Jenkins啟動腳本:成功更新hudson.model.DirectoryBrowserSupport的系統屬性值.CSP . 腳本位置:${jenkinsHome}/init.groovy.d")

  3. 重啟 Jenkins 服務: brew services restart jenkins-lts

  4. 重新構建作業並將HTML 報告驗證到構建中

Jenkins 中的警告 CSP

Debian/Ubuntu 上,在aptitude 安裝中

  • sudo vi /etc/default/jenkins
  • -Dhudson.model.DirectoryBrowserSupport.CSP=添加到JAVA_ARGS (例如JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP="
  • 重啟詹金斯 - 重啟詹金斯service jenkins restart

這對我來說已經足夠了,但有關參數的完整列表,請參閱此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM