Jenkins - Плагін видавця HTML - При перегляді звіту на сервері Jenkins не відображається CSS


92

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

Налаштування мого видавця HTML у Jenkins:

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

Сторінка мого звіту при відображенні в Jenkins:

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

Сторінка мого звіту, коли вона відображається в локальній мережі:

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



2
Усі кажуть, що ви "виправляєте" це, вимкнувши Політику безпеки вмісту, не замислюючись над тим, чому це взагалі існує. Будь-хто, хто може вплинути на внесені зміни, зможе викрасти облікові дані адміністратора та отримати доступ до цілого кластера Дженкінса. Хоча вбудований 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, яку я мав з джинкінами.
Еял Суоліман

1
@Steerpike Я поцікавився, що ти маєш на увазі, а потім з'ясував, що css було заблоковано при перезапуску Дженкінса. Тож я створив роботу Дженкінса, яка запускає команду кожні 12 годин. Здається, це робить фокус.
Aeropher

@Aeropher дякую - я новачок Дженкінса - як налаштувати цю роботу? Налаштувати загальну роботу за допомогою кроку збірки виконання командної команди Windows?
Steerpike

3
@Steerpike Це правильно, за винятком того, що це грувна команда, тому вам потрібно виконати її в кроці побудови "Виконати систему Groovy Script". А потім у розділі "Тригери побудови" я вибрав "
Постійно

Насправді вам навіть не потрібно повторювати свою збірку. Просто перезавантажте згенерований HTML від Дженкінса, і це набере ефект зміни політики.
hshib

23

У 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' - Дозволяє небезпечну оцінку динамічного коду, таку як JavaScript eval ()

Використання: default-src 'unsafe-eval'

data: - Дозволяє завантажувати ресурси за допомогою схеми даних (наприклад, закодовані зображення Base64).

Використання: img-src 'self' data:

Докладніше про політику безпеки вмісту див. Тут


1
ви повинні вмикати лише вбудований css, а не всі ці інші небезпечні речі
OrangeDog

Якщо ви використовуєте якийсь svg в об'єкті в такій частині даних, як ця <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(результат інтерактивної документації про перепочинок asciidoctor для вбудованої схеми 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

Перейдіть до «Управління Дженкінсом» -> «Консоль сценарію» і запустіть команду нижче:

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

@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, як зазначено у відповіді Валла .

Ефект діє до тих пір, поки Дженкінс не перезапуститься, а потім вам доведеться робити це знову.

Рішенням для вирішення цієї проблеми є налаштування завдання, яке виконуватиме це за вас, коли б джинкін ​​запускався.

Це можна зробити за допомогою плагіна Startup Trigger .

Після його встановлення створіть нове завдання, і у вас з’явиться новий прапорець у розділі Створення тригерів, який вам доведеться встановити.

Потім додайте крок збірки сценарію Groovy Execute із командою:

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

Економте і все повинно працювати.


За допомогою цього методу вам також потрібно встановити плагін Groovy, якщо ви цього ще не зробили. В іншому випадку крок побудови сценарію "Виконати систему Groovy" не відображатиметься серед параметрів побудови.
Bálint Pap

5

Для версії Ubuntu 14 корисними були спеціальні плагіни:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Щоб розпочати роботу при запуску дженкінів

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

І я зробив роботу, яка починається з перезапуску Дженкінса і встановлює параметр.

встановлений для початку побудови після запуску Дженкінса

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


Хоча запуск завдання завершено успішно, він не вмикає відображення CSS для моїх звітів. Я запустив той самий грувий скрипт у "Консолі сценарію", і це спрацювало нормально. Що ще я можу зробити? Грубий сценарій цієї роботи не змінює фактичне майно батьків Дженкіна.
frakman1

@ frakman1 на даний момент мій скрипт Groovy виглядає так - System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Але це все, і все працює. Можливо, у вас немає адміністратора?
abiab

Дякую за відповідь. Зрештою я змусив це працювати. Мені довелося скористатися цим сценарієм: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

Йти до

Керувати Дженкінсом -> Консоль сценарію

і введіть таку команду:

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. Перейдіть до: Керування Дженкінсом> Керування вузлами та хмарами
  2. Клацніть піктограму Gear праворуч для вузла (за замовчуванням буде лише один Вузол, який називається 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

Пізно відповідати, але думали поділитися.

Я боровся з Дженкінсом, розгорнутим на Tomcat, намагався виконати сценарій, це допомагає, але зникає, якщо tomcat перезавантажується.

Зроблено постійне виправлення, встановивши властивість у catalina.properties у tomcat.

Файл властивостей: tomcat_installation_dir / conf / catalina.properties Просто скопіюйте, нарешті, вставте нижній рядок у catalina.properties (ви можете встановити його де завгодно, щоб просто не возитися з існуючими властивостями)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

У мене були такі ж проблеми після додавання HTTPS до моїх джинкін. Якщо у вас така сама проблема, рішення є простим - встановіть для URL-адреси Дженкінса протокол HTTPS замість HTTP. Його можна налаштувати за допомогою конфігурації jenkins -> jenkins url


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=" )
  • Перезапустити jenkins - service jenkins restart

Цього мені було достатньо, але для повного переліку параметрів див. Цю відповідь .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.