Jenkins - плагин HTML Publisher - CSS не отображается при просмотре отчета на сервере Jenkins


92

У меня странная проблема с плагином Jenkins HTML Publisher, в котором весь модный CSS, который я добавил в отчет, удаляется при просмотре в Jenkins. Если я загружу отчет на локальный компьютер, я смогу увидеть форматирование CSS. Есть ли в Jenkins настройка, позволяющая просматривать CSS?

Мои настройки HTML-издателя в Jenkins:

введите описание изображения здесь

Моя страница отчета при отображении в Jenkins:

введите описание изображения здесь

Моя страница отчета при отображении в локальном:

введите описание изображения здесь



2
Все говорят, что вы «исправляете» это, отключив политику безопасности контента, не задумываясь о том, почему она вообще существует. Любой, кто может повлиять на вносимые изменения, сможет захватить учетные данные администратора и получить доступ ко всему кластеру Jenkins. В то время как встроенный css в основном безопасен, если вы будете осторожны, разрешение скриптов - это катастрофа.
OrangeDog

Ответы:


174

Разобрался в проблеме. Поделиться здесь для других пользователей.

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. Управлять Дженкинсом->
  2. Управление узлами->
  3. Нажмите настройки (значок шестеренки) ->
  4. щелкните Консоль сценариев слева и введите следующую команду:

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

и нажмите "Выполнить". Если вы видите вывод «Результат:» под заголовком «Результат», значит, защита отключена. Повторно запустите вашу сборку, и вы увидите, что в новых заархивированных файлах HTML будет включен CSS.


1
Спасибо!!! Это действительно помогло мне решить эту проблему css, которая у меня была с jenkins.
Эял Сулиман

1
@Steerpike. Мне было интересно, что вы имели в виду, а потом выяснилось, что CSS был заблокирован при перезапуске Jenkins. Итак, я создал задание Jenkins, которое запускает команду каждые 12 часов. Кажется, добился цели.
Aeropher

@Aeropher, спасибо - я новичок в Jenkins - как мне настроить эту работу? Настроить общее задание с помощью этапа сборки выполнения пакетной команды Windows?
Стирпайк,

3
@Steerpike Это верно, за исключением того, что это отличная команда, поэтому вам нужно выполнить ее на этапе сборки «Выполнить системный Groovy Script». А затем в разделе «Триггеры сборки» я выбрал «Сборка периодически» со следующим значением: H 12 * * *
Aeropher

На самом деле вам даже не нужно перезапускать сборку. Просто перезагрузите сгенерированный HTML из Jenkins, и это повлияет на изменение политики.
hshib 07

22

В 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:;\""

Это будет работать даже после перезапуска сервера jenkins.


Директива

default-src : default-src - это политика по умолчанию для загрузки контента, такого как JavaScript, изображения, CSS, шрифты, запросы AJAX, фреймы, мультимедиа HTML5.

img-src: определяет действительные источники изображений.

Исходное значение

'self' - позволяет загружать ресурсы из одного источника (та же схема, хост и порт).

Применение : default-src 'self'

'unsafe-inline' - разрешает использование встроенных элементов источника, таких как атрибут стиля, onclick или тела тегов скрипта (в зависимости от контекста источника, к которому он применяется) и javascript: URI.

Применение : default-src 'unsafe-inline'

'unsafe-eval' - разрешает оценку небезопасного динамического кода, такого как eval () JavaScript.

Применение : default-src 'unsafe-eval'

data: - Позволяет загружать ресурсы через схему данных (например, изображения в кодировке Base64).

Применение : img-src 'self' data:

Подробнее о политике безопасности контента можно узнать здесь.


1
вам следует включить только встроенный CSS, а не все эти другие небезопасные вещи
OrangeDog

Если вы используете какой-то svg in object в такой части данных <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(результат интерактивной документации asciidoctor spring-rest для встроенной диаграммы plantuml), вам нужно будет установить object-src на self. Уведомление о побеге: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,

14

Перейдите в «Управление Jenkins» -> «Консоль сценариев» и выполните следующую команду:

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:;")
Эндрю Макродт 01

@AndrewMackrodt то, что вы предложили, - единственное решение, которое сработало для меня (я использую Jenkins на CentOS)
lax1089

12

(Следующее решение предназначено для 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аргументов
Саша Бонд

9

Вы можете исправить это, используя команду groovy, как указано в ответе Валла .

Эффект сохраняется до тех пор, пока Дженкинс не перезапустится, а потом вам придется сделать это снова.

Решение этой проблемы - настроить задание, которое будет делать это за вас всякий раз, когда jenkins запускается.

Вы можете сделать это с помощью плагина Startup Trigger .

После его установки создайте новое задание, и у вас появится новый флажок в разделе « Триггеры сборки », который вам нужно будет проверить.

Затем добавьте этап сборки сценария Groovy Execute system с помощью команды:

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

Сохраните и все должно работать.


При использовании этого метода вам также необходимо установить плагин Groovy, если вы еще этого не сделали. В противном случае этап сборки сценария Groovy системы «Выполнить» не будет отображаться среди параметров сборки.
Балинт Пап,

5

Для версии Ubuntu 14 полезными были специальные плагины:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Чтобы начать работу по стартапу jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - для запуска скрипта System Groovy

И я сделал задание, которое запускается при перезапуске Jenkins и устанавливает параметр.

установить для начала сборки после запуска Jenkins

И добавил системный Groovy-скрипт для установки параметра. Запустить сценарий System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "песочница; img-src 'self';")


Хотя выполнение задания завершается успешно, оно не позволяет отображать CSS для моих отчетов. Я запустил тот же самый отличный сценарий в «Консоли сценариев», и он работал нормально. Что еще я могу сделать? Отличный сценарий этой работы не изменяет фактическое свойство родительского объекта Jenkin.
frakman1

@ frakman1 в данный момент мой сценарий Groovy выглядит так - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Но это все, и все работает. Может у вас нет администратора?
abiab 07

Спасибо за ответ. В конце концов я заставил его работать. Вместо этого мне пришлось использовать этот сценарий: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", "")

затем нажмите "Выполнить". если вы получаете результат как «Результат», то повторно запустите сборку, проверьте формат отчета 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. Нажмите "Консоль сценариев" слева.
  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-адрес Jenkins на использование протокола HTTPS вместо HTTP. Его можно настроить с помощью конфигурации jenkins -> url-адрес jenkins


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

Мне этого было достаточно, но полный список параметров см. В этом ответе .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.