Jenkins - плагин HTML Publisher - CSS не отображается при просмотре отчета на сервере Jenkins
У меня странная проблема с плагином Jenkins HTML Publisher, когда весь модный CSS, добавленный в отчет, удаляется при просмотре в Jenkins. Если я загружаю отчет на локальный компьютер, я вижу форматирование CSS. Есть ли в Jenkins параметр, позволяющий просматривать CSS?
Мои настройки HTML-издателя в Jenkins:
Моя страница отчета при отображении в Jenkins:
Страница моего отчета при локальном отображении:
19 ответов
Разобрался с проблемой. Поделиться здесь для других пользователей.
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 и т. Д.
Чтобы ослабить это правило, перейдите в консоль Manage Jenkins->Script и введите следующую команду:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
и нажмите Выполнить. Если вы видите результат как "Результат:" ниже заголовка "Результат", защита отключается. Перезапустите сборку, и вы увидите, что в новых архивированных HTML-файлах будет включен CSS.
В 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:;\""
Это будет работать даже после перезапуска сервера jenkin.
директива
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:
Пожалуйста, ознакомьтесь больше с политикой безопасности контента здесь
Перейдите в "Управление Jenkins" -> "Консоль сценариев" и выполните команду ниже:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
В CentOS решение ниже (которое было предложено в комментариях к другому ответу) - единственное, которое сработало для меня:
- Перейдите к: Управление Jenkins> Управление узлами и облаками
- Щелкните значок шестеренки справа от узла (по умолчанию будет только один узел с именем Master).
- Нажмите "Консоль сценариев" слева.
- Введите в окно консоли следующее:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
- Нажмите "Выполнить"
- Вы должны увидеть результат в разделе результатов, как на скриншоте ниже:
Моя конкретная проблема заключалась в отсутствии изображений / css в отчетах Serenity BDD. После выполнения этих шагов в моих отчетах Serenity были все изображения / CSS-рендеринг должным образом, включая отчеты о сборках, которые были выполнены до этого изменения. Это решение также будет работать для любого опубликованного отчета на основе HTML.
Вы можете исправить это, используя команду groovy, как указано в ответе Vall.
Эффект сохраняется до тех пор, пока Дженкинс не перезапустится, а после этого вам придется делать это снова.
Решение этой проблемы состоит в том, чтобы настроить работу, которая будет делать это для вас каждый раз при запуске jenkins.
Вы можете сделать это с помощью плагина Startup Trigger.
После установки создайте новое задание, и у вас будет новый флажок в разделе " Построение триггеров ", который вам нужно будет проверить.
Затем добавьте шаг сборки скрипта Groovy для выполнения системы с помощью команды:
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, чтобы получить изменения.
Для версии Ubuntu 14 полезными были специальные плагины:
https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - чтобы начать работу при запуске jenkins
https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - для запуска скрипта System Groovy
И я выполнил задание, которое запускается при перезапуске Jenkins и устанавливает параметр.
И добавил системный скрипт Groovy для настройки параметров. System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "песочница; img-src 'self';")
Идти к
Управление Jenkins -> Консоль скриптов
и введите следующую команду:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
затем нажмите Run. если вы получите результат как "Результат", то повторно запустите сборку, проверьте формат отчета HTML
Хотя это старый пост и на него дан ответ, я почувствовал желание указать на новый материал, чтобы улучшить ответ. Итак, извините за неприятную ситуацию, но в конце концов это лучшая поисковая находка по этой теме.
Во всех предыдущих ответах, которые я видел, предлагалось так или иначе установить общедоступную политику безопасности контента по умолчанию. Учитывая тот факт, что контент может быть изменен любым, кто запускает сборку вашего конвейера Jenkins, это несет в себе определенный риск. В конце концов, это допустимая настройка, которая позволяет минимизировать риск межсайтового выполнения сценариев. На это указывалось в нескольких комментариях, которые я прочитал даже в этой теме.
Для дальнейшего обучения я нашел несколько хороших ресурсов.
https://www.jenkins.io/doc/book/security/configuring-content-security-policy/
https://content-security-policy.com/
Следующее позволило включить красивые отчеты о покрытии HTML на моем управляемом экземпляре Jenkins. В документации Jenkins указано, что установка URL-адреса ресурса является несколько предпочтительным решением, но в моем случае это было невозможно:
- В веб-интерфейсе Jenkins перейдите к консоли сценариев.
- Тип
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';base-uri 'self';form-action 'self' ")
и нажмите «Выполнить». - Настройка вступает в силу немедленно, поэтому проверьте результаты, перезагрузив «испорченный» контент, который вы пытаетесь отобразить.(например, отчет об освещении ваших вакансий в формате HTML)
- Возврат к типу по умолчанию
System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP")
в консоли сценариев.
Предоставленный заголовок CSP является так называемой стартовой политикой из второй ссылки, приведенной выше.
Эта политика разрешает изображения, сценарии, AJAX, действия форм и CSS из одного и того же источника и не допускает загрузку каких-либо других ресурсов (например, объекта, фрейма, мультимедиа и т. д.). Это хорошая отправная точка для многих сайтов.
В случае отчетов о покрытии HTML в защищенном от доступа экземпляре Jenkins я нашел это приемлемым и работающим.
Для постоянной настройки создайте файл сценария 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
Откройте файл 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
Для тех, кто использует asciidoctor-maven-plugin
плагин для создания HTML-документа из файла asciidoc для дальнейшей публикации в Jenkins, обновите конфигурацию плагина, добавьте linkcss
атрибут:
<configuration>
<attributes>
<linkcss>true</linkcss>
</attributes>
<backend>html5</backend>
<outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
</configuration>
Я знаю, что это старо, но это отлично сработало для меня, и это то, что, кажется, рекомендуется в документах Дженкинса. Я просто установил для корня ресурса другой URL-адрес, обслуживаемый из того же места.
«Настоятельно рекомендуется настроить URL-адрес корня ресурса вместо настройки Content-Security-Policy. Большая часть приведенной ниже документации была написана, когда Content-Security-Policy впервые была представлена, и сохраняется для использования администраторами, которые не могут настроить Jenkins для обслуживать пользовательский контент из другого домена».
To set the system property permanently if using Jenkins-X, then create the file myvalues.yaml
in the current directory, with the following content:
jenkins:
Master:
JavaOpts: >
-Dhudson.model.DirectoryBrowserSupport.CSP=
Then restart the jenkins-x platform, which can be done by upgrading it:
$ jx upgrade platform --always-upgrade
# Presumably jx.exe is used if on Windows (not tested)
To avoid actually upgrading the platform, just forcibly upgrade it to the same version:
$ version=$(jx version --no-version-check\
| grep 'jenkins x platform' | sed -e 's/^jenkins.\+ //')
$ jx upgrade platform --version ${version} --always-upgrade
У нас есть гораздо более простое решение проблемы. Если вы действительно не настаиваете на наличии отчетов в формате HTML, вы можете просто использовать плагин Warnings NG (что в любом случае является хорошей идеей):
https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md
Мы используем это для CodeNarc (Groovy), но также для Checkstyle, PMD, SpotBugs и предупреждений Java (Java).
- В MacOS Jenkins запускает службу, которая должна создать скрипт groovy внутри $JENKINS_HOME/init.groovy.d.
- Позвоните в startup-properties.groovy и введите код:
import jenkins.model.Jenkins
import java.util.logging.LogManager
/* Jenkins home directory */
def jenkinsHome = Jenkins.instance.getRootDir().absolutePath
def logger = LogManager.getLogManager().getLogger("")
/* Replace the Key and value with the values you want to set.*/
/* System.setProperty(key, value) */
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
logger.info("Jenkins Startup Script: Successfully updated the system properties value for hudson.model.DirectoryBrowserSupport.CSP . Script location : ${jenkinsHome}/init.groovy.d")
- Перезапустите службу Jenkins: службы варки перезапускают jenkins-lts
Повторно создайте задание и проверьте HTML-отчет в сборке.
https://stackru.com/images/fc561f6f07351b5d76b4979964472356ca8255fe.png
Слишком поздно, чтобы ответить, но думал, чтобы поделиться.
Я боролся с Jenkins, развернутым на Tomcat, пытался выполнить скрипт, это помогает, но уходит, если перезагрузить tomcat.
Сделано постоянное исправление, установив свойство в catalina.properties в tomcat.
Файл свойств: tomcat_installation_dir/conf/catalina.properties Просто скопируйте и вставьте строку ниже в последний раз в catalina.properties (вы можете установить его где угодно, только чтобы не связываться с существующими свойствами)
-Dhudson.model.DirectoryBrowserSupport.CSP = ""
У меня были те же проблемы после добавления HTTPS к моим Jenenkins. В случае, если у вас возникла та же проблема, решение простое - установите свой URL-адрес Jenkins на использование протокола HTTPS вместо HTTP. Это можно настроить через конфигурацию jenkins -> url jenkins
В Debian / Ubuntu, в установках aptitude:
sudo vi /etc/default/jenkins
- добавлять
-Dhudson.model.DirectoryBrowserSupport.CSP=
кJAVA_ARGS
(напримерJAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP="
) - Перезагрузите Дженкинс -
service jenkins restart
Этого мне было достаточно, но полный список параметров см. В этом ответе.