Jenkins - Plugin trình xuất bản HTML - Không có CSS ​​nào được hiển thị khi báo cáo được xem trong Máy chủ Jenkins


92

Tôi gặp sự cố lạ với plugin Jenkins HTML Publisher, trong đó tất cả CSS ưa thích mà tôi đã thêm vào báo cáo bị loại bỏ khi xem trong Jenkins. Nếu tôi tải báo cáo xuống cục bộ, tôi có thể thấy định dạng CSS. Có cài đặt nào trong Jenkins cho phép xem CSS không?

Cài đặt nhà xuất bản HTML của tôi trong Jenkins:

nhập mô tả hình ảnh ở đây

Trang Báo cáo của tôi khi được hiển thị trong Jenkins:

nhập mô tả hình ảnh ở đây

Trang Báo cáo của tôi khi được hiển thị trong Địa phương:

nhập mô tả hình ảnh ở đây



2
Mọi người đang nói rằng bạn "sửa chữa" nó bằng cách tắt Chính sách bảo mật nội dung mà không cần suy nghĩ về lý do tại sao nó ở đó ngay từ đầu. Bất kỳ ai có thể ảnh hưởng đến các thay đổi sẽ được xây dựng sẽ có thể chiếm đoạt thông tin đăng nhập quản trị viên và có quyền truy cập vào toàn bộ cụm Jenkins. Mặc dù css nội tuyến hầu như an toàn nếu bạn cẩn thận, việc cho phép các tập lệnh là một thảm họa.
OrangeDog

Câu trả lời:


175

Tìm ra vấn đề. Chia sẻ nó ở đây cho những người dùng khác.

CSS bị loại bỏ do Chính sách bảo mật nội dung trong Jenkins. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

Quy tắc mặc định được đặt thành:

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

Bộ quy tắc này dẫn đến những kết quả sau:

  • Không có JavaScript nào được phép
  • Không cho phép plugin (đối tượng / nhúng)
  • Không cho phép CSS nội tuyến hoặc CSS từ các trang web khác
  • Không cho phép hình ảnh từ các trang web khác
  • Không cho phép khung
  • Không có phông chữ web nào được phép
  • Không cho phép XHR / AJAX, v.v.

Để nới lỏng quy tắc này, hãy truy cập

  1. Quản lý Jenkins->
  2. Quản lý nút->
  3. Nhấp vào cài đặt (biểu tượng bánh răng) ->
  4. nhấp vào Bảng điều khiển tập lệnh ở bên trái và nhập lệnh sau:

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

và nhấn Run. Nếu bạn thấy đầu ra là 'Kết quả:' bên dưới tiêu đề "Kết quả" thì bảo vệ đã tắt. Chạy lại bản dựng của bạn và bạn có thể thấy rằng các tệp HTML mới được lưu trữ sẽ có CSS ​​được bật.


1
Cảm ơn bạn!!! Nó thực sự đã giúp tôi giải quyết vấn đề css này mà tôi gặp phải với jenkins.
Eyal Sooliman

1
@Steerpike Tôi tự hỏi ý bạn là gì và sau đó phát hiện ra rằng css đã bị chặn khi khởi động lại Jenkins. Vì vậy, tôi đã tạo một công việc Jenkins chạy lệnh 12 giờ một lần. Có vẻ để làm các thủ thuật.
Aeropher

@Aeropher cảm ơn bạn - Tôi là người mới làm quen với Jenkins - làm cách nào để thiết lập công việc đó? Thiết lập một công việc chung với một Bước Xây dựng Thực thi Lệnh Hàng loạt của Windows?
Steerpike

3
@Steerpike Đúng vậy ngoại trừ nó là một lệnh Groovy, vì vậy bạn cần thực hiện nó trong bước xây dựng "Execute system Groovy Script". Và sau đó trong phần "Trình kích hoạt xây dựng", tôi đã chọn "Xây dựng định kỳ" với giá trị này: H 12 * * *
Aeropher

Trên thực tế, bạn thậm chí không cần phải chạy lại bản dựng của mình. Chỉ cần tải lại HTML đã tạo từ Jenkins và nó sẽ có tác dụng thay đổi chính sách.
hshib

23

Trong CentOs , để kích hoạt hình ảnh trong báo cáo html

  • sudo vi /etc/sysconfig/jenkins
  • đặt sau trong 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:;\""

Điều này sẽ hoạt động ngay cả sau khi khởi động lại máy chủ của jenkins.


Chỉ thị

default-src : default-src là chính sách mặc định để tải nội dung như JavaScript, Hình ảnh, CSS, Phông chữ, yêu cầu AJAX, Khung, HTML5 Media

img-src: Xác định nguồn hình ảnh hợp lệ.

Giá trị nguồn

'self' - Cho phép tải các tài nguyên từ cùng một nguồn gốc (cùng một sơ đồ, máy chủ và cổng).

Sử dụng : default-src 'self'

'nội tuyến không an toàn' - Cho phép sử dụng các phần tử nguồn nội tuyến như thuộc tính style, onclick hoặc phần thân thẻ script (tùy thuộc vào ngữ cảnh của nguồn mà nó được áp dụng) và javascript: URI.

Sử dụng : default-src 'unsafe-inline'

'secure-eval' - Cho phép đánh giá mã động không an toàn, chẳng hạn như eval () JavaScript

Sử dụng : default-src 'unsafe-eval'

dữ liệu: - Cho phép tải tài nguyên thông qua lược đồ dữ liệu (ví dụ: hình ảnh được mã hóa Base64).

Sử dụng : img-src 'self' data:

Vui lòng tham khảo thêm về chính sách bảo mật nội dung tại đây


1
bạn chỉ nên cho phép css inline, và không phải tất cả những điều này không an toàn khác
OrangeDog

Nếu bạn sử dụng một số svg trong đối tượng trong phần dữ liệu như thế này <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(kết quả của tài liệu về phần còn lại lò xo asciidoctor tương tác cho sơ đồ plantuml được nhúng), bạn sẽ cần đặt đối tượng-src thành chính nó. Thông báo thoát: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
tuyệt quá! cũng có thể được sử dụng cho docker với --env JAVA_OPTS = "..."
smelm

1
Đối với cài đặt ubuntu của tôi, tôi đã sử dụng vi /etc/default/jenkinsvới biếnJAVA_ARGS
mRyan

14

Đi tới “Manage Jenkins” -> “Script console” và chạy lệnh dưới đây:

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

3
Sau khi sửa đổi param thứ hai với các giá trị được đề cập bởi kithinkmatthew này làm việc cho tôi, tức làSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@AndrewMackrodt những gì bạn đề xuất là giải pháp duy nhất phù hợp với tôi (Tôi đang chạy Jenkins trên CentOS)
lax1089

13

(Giải pháp sau dành cho Windows.)

Cách khắc phục vĩnh viễn là thay đổi một dòng trong [Jenkins directory]\jenkins.xml(đối với tôi là tại C:\Jenkins\jenkins.xml)

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

Thêm đối số sau vào danh sách các đối số được phân tách bằng khoảng trắng:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Sau đó, khởi động lại dịch vụ Jenkins để nhận thay đổi.


1
đó là câu trả lời hiệu quả duy nhất đối với tôi, tôi cũng đã thêm -Dfile.encoding=UTF-8vào các lập luận
Sasha Bond

9

Bạn có thể sửa lỗi này bằng cách sử dụng lệnh groovy như được chỉ định trong câu trả lời của Vall .

Hiệu ứng có hiệu lực cho đến khi Jenkins khởi động lại và sau đó bạn phải làm lại.

Giải pháp để giải quyết vấn đề này là định cấu hình một công việc sẽ thực hiện việc này cho bạn bất cứ khi nào jenkins khởi động.

Bạn có thể thực hiện việc này bằng cách sử dụng plugin Startup Trigger .

Sau khi bạn cài đặt nó, hãy tạo một công việc mới và bạn sẽ có một hộp kiểm mới trong phần Build Trigger mà bạn sẽ phải chọn.

Sau đó, thêm bước xây dựng tập lệnh Groovy của hệ thống Thực thi bằng lệnh:

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

Lưu và mọi thứ sẽ hoạt động.


Với phương pháp này, bạn cũng cần phải cài đặt plugin Groovy, nếu bạn chưa có. Nếu không, bước xây dựng tập lệnh Groovy của hệ thống Thực thi sẽ không hiển thị trong số các tùy chọn xây dựng.
Bálint Pap

5

Đối với phiên bản Ubuntu 14, hữu ích là các plugin đặc biệt:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Để bắt đầu công việc khi khởi động jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Để chạy tập lệnh System Groovy

Và tôi đã thực hiện một công việc, bắt đầu khi khởi động lại Jenkins và đặt tham số.

thiết lập để bắt đầu xây dựng sau khi Jenkins được chạy

Và thêm script Groovy hệ thống để thiết lập tham số. Chạy tập lệnh System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


Mặc dù chạy công việc hoàn tất thành công, nó không cho phép hiển thị CSS cho các báo cáo của tôi. Tôi đã chạy cùng một tập lệnh thú vị trong "Script Console" và điều đó hoạt động tốt. Tôi có thể làm gì nữa? Kịch bản thú vị của công việc này không thay đổi tài sản thực sự của Jenkin mẹ.
frakman1

@ frakman1 tại thời điểm này, tập lệnh Groovy của tôi trông giống như sau - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Nhưng đó là tất cả và mọi thứ đều hoạt động. Có thể bạn không có người dùng quản trị?
abiab

Cảm ơn bạn đã phản hồi. Cuối cùng tôi đã làm cho nó hoạt động. Tôi đã phải sử dụng tập lệnh này để thay thế: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

Đi đến

Quản lý Jenkins -> Bảng điều khiển tập lệnh

và nhập lệnh sau:

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

rồi nhấn Run. nếu bạn nhận được đầu ra là 'Kết quả', sau đó chạy lại bản dựng, hãy kiểm tra định dạng báo cáo HTML


1

Để cài đặt vĩnh viễn, hãy tạo một tệp kịch bản Groovy $ JENKINS_HOME / init.groovy hoặc bất kỳ tệp .groovy nào trong thư mục $ JENKINS_HOME / init.groovy.d / với nội dung sau:

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

systemctl khởi động lại jenkins

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


1

Mở tệp jenkins.xml và sao chép các đối số như bên dưới. nó sẽ sửa chữa vĩnh viễn. Sau khi hoàn tất, hãy khởi động lại máy của bạ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

Trên CentOS , giải pháp dưới đây (được đề xuất trong các bình luận của một câu trả lời khác) là giải pháp duy nhất phù hợp với tôi:

  1. Đi tới: Quản lý Jenkins> Quản lý Nút và Đám mây
  2. Nhấp vào biểu tượng Bánh răng ở phía bên tay phải cho nút (theo mặc định sẽ chỉ có một nút được gọi là Master)
  3. Nhấp vào 'Bảng điều khiển Tập lệnh' ở bên trái
  4. Nhập thông tin sau vào cửa sổ bảng điều khiển: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Bấm Chạy
  6. Bạn sẽ thấy một số đầu ra trong phần Kết quả, tương tự như ảnh chụp màn hình bên dưới:

Kết quả bảng điều khiển tập lệnh

Vấn đề cụ thể của tôi là thiếu hình ảnh / css trong báo cáo Serenity BDD. Sau khi thực hiện các bước này, báo cáo Serenity của tôi có tất cả hình ảnh / css hiển thị đúng cách, bao gồm cả báo cáo từ các bản dựng đã thực thi trước thay đổi này. Giải pháp này cũng sẽ hoạt động cho bất kỳ báo cáo dựa trên html nào được xuất bản.


0

Đã quá muộn để trả lời nhưng nghĩ để chia sẻ.

Tôi đã gặp khó khăn với Jenkins được triển khai trên Tomcat, đã thử thực thi tập lệnh, nó có ích nhưng sẽ biến mất nếu tomcat được khởi động lại.

Đã thực hiện bản sửa lỗi vĩnh viễn bằng cách đặt thuộc tính trong catalina.properties trong tomcat.

Tệp thuộc tính: tomcat_installation_dir / conf / catalina.properties Chỉ cần sao chép, dán dòng dưới đây vào cuối cùng trong catalina.properties (bạn có thể đặt nó ở bất kỳ đâu chỉ để không gây rối với các thuộc tính hiện có)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

Tôi gặp vấn đề tương tự sau khi thêm HTTPS vào jenkins của mình. Trong trường hợp bạn đang gặp vấn đề tương tự, giải pháp rất dễ dàng - đặt url Jenkins của bạn để sử dụng giao thức HTTPS thay vì HTTP. Nó có thể được cấu hình thông qua cấu hình jenkins -> url jenkins


0

Để đặt thuộc tính hệ thống vĩnh viễn nếu sử dụng Jenkins-X , hãy tạo tệp myvalues.yamltrong thư mục hiện tại, với nội dung sau:

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

Sau đó, khởi động lại nền tảng jenkins-x, có thể được thực hiện bằng cách nâng cấp nó:

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

Để tránh thực sự nâng cấp nền tảng, chỉ cần buộc nâng cấp nó lên cùng một phiên bản:

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

0

Đối với những người đang sử dụng asciidoctor-maven-pluginplugin để tạo tài liệu HTML từ tệp asciidoc để xuất bản thêm lên Jenkins, hãy cập nhật cấu hình plugin, thêm linkcssthuộc tính:

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

-2

Trên Debian / Ubuntu , trong cài đặt aptitude :

  • sudo vi /etc/default/jenkins
  • Thêm -Dhudson.model.DirectoryBrowserSupport.CSP=vào JAVA_ARGS(ví dụ JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Khởi động lại jenkins - service jenkins restart

Điều này là đủ đối với tôi, nhưng đối với danh sách đầy đủ các thông số, hãy xem câu trả lời này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.