Jenkins - Complemento de editor HTML: no se muestra CSS cuando se visualiza el informe en Jenkins Server


92

Tengo un problema extraño con el complemento Jenkins HTML Publisher, en el que todo el CSS elegante que he agregado al informe se elimina cuando se ve en Jenkins. Si descargo el informe a local, puedo ver el formato CSS. ¿Hay alguna configuración en Jenkins que permita ver CSS?

Mi configuración de editor HTML en Jenkins:

ingrese la descripción de la imagen aquí

Mi página de informe cuando se muestra en Jenkins:

ingrese la descripción de la imagen aquí

Mi página de informe cuando se muestra en local:

ingrese la descripción de la imagen aquí



2
Todo el mundo está diciendo que lo "arregle" desactivando la Política de seguridad de contenido, sin pensar en por qué está allí en primer lugar. Cualquiera que pueda afectar los cambios que se crearán podrá secuestrar las credenciales de administrador y obtener acceso a todo el clúster de Jenkins. Si bien el CSS en línea es más seguro si se tiene cuidado, permitir scripts es un desastre.
OrangeDog

Respuestas:


174

Resolví el problema. Compartiéndolo aquí para otros usuarios.

CSS se elimina debido a la Política de seguridad de contenido en Jenkins. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

La regla predeterminada se establece en:

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

Este conjunto de reglas da como resultado lo siguiente:

  • No se permite JavaScript en absoluto
  • No se permiten complementos (objeto / incrustación)
  • No se permiten CSS en línea ni CSS de otros sitios
  • No se permiten imágenes de otros sitios
  • No se permiten marcos
  • No se permiten fuentes web
  • No se permiten XHR / AJAX, etc.

Para relajar esta regla, vaya a

  1. Administrar Jenkins->
  2. Administrar nodos->
  3. Haga clic en configuración (icono de engranaje) ->
  4. haga clic en la consola de secuencia de comandos a la izquierda y escriba el siguiente comando:

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

y presione Ejecutar. Si ve la salida como 'Resultado:' debajo del encabezado "Resultado", la protección está desactivada. Vuelva a ejecutar su compilación y podrá ver que los nuevos archivos HTML archivados tendrán el CSS habilitado.


1
¡¡¡Gracias!!! Realmente me ayudó a resolver este problema de CSS que tuve con jenkins.
Eyal Sooliman

1
@Steerpike Me pregunté qué querías decir y luego descubrí que el CSS estaba bloqueado al reiniciar Jenkins. Así que creé un trabajo de Jenkins que ejecuta el comando cada 12 horas. Parece funcionar.
Aeropher

@Aeropher, gracias. Soy un novato de Jenkins. ¿Cómo configuro ese trabajo? ¿Configurar un trabajo general con un paso de compilación de ejecutar comando por lotes de Windows?
Steerpike

3
@Steerpike Eso es correcto, excepto que es un comando maravilloso, por lo que necesita ejecutarlo en un paso de compilación "Ejecutar el sistema Groovy Script". Y luego, en la sección "Activadores de compilación", seleccioné "Compilar periódicamente" con este valor: H 12 * * *
Aeropher

En realidad, ni siquiera necesitas volver a ejecutar tu compilación. Simplemente vuelva a cargar el HTML generado desde Jenkins y tendrá el efecto del cambio de política.
hshib

22

En CentOs , para habilitar imágenes en informes html

  • sudo vi /etc/sysconfig/jenkins
  • establecer siguiendo en 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:;\""

Esto funcionará incluso después de reiniciar el servidor de jenkins.


Directiva

default-src : default-src es la política predeterminada para cargar contenido como JavaScript, imágenes, CSS, fuentes, solicitudes AJAX, marcos, HTML5 Media

img-src: define fuentes válidas de imágenes.

Valor fuente

'self': permite cargar recursos desde el mismo origen (mismo esquema, host y puerto).

Uso: default-src 'self'

'inseguro-en línea' : permite el uso de elementos de origen en línea, como atributos de estilo, onclick o cuerpos de etiquetas de script (depende del contexto de la fuente a la que se aplica) y javascript: URI.

Uso: default-src 'unsafe-inline'

'unsafe-eval' : permite la evaluación de código dinámico inseguro como JavaScript eval ()

Uso: default-src 'unsafe-eval'

datos: - Permite cargar recursos a través del esquema de datos (por ejemplo, imágenes codificadas en Base64).

Uso: img-src 'self' data:

Consulte más información sobre la política de seguridad del contenido aquí.


1
solo debe habilitar CSS en línea, y no todas estas otras cosas inseguras
OrangeDog

Si usa algún svg en un objeto en una parte de datos como esta <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(resultado de la documentación interactiva del asciidoctor spring-rest para el diagrama plantuml incrustado), necesitaría establecer object-src en self. Aviso de escape: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
¡estupendo! también se puede utilizar para la ventana acoplable con --env JAVA_OPTS = "..."
smelm

1
Para mi instalación de ubuntu utilicé vi /etc/default/jenkinscon la variableJAVA_ARGS
mRyan

14

Vaya a "Administrar Jenkins" -> "Consola de secuencia de comandos" y ejecute el siguiente comando:

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

3
Después de modificar el segundo parámetro a los valores mencionados por kithinkmatthew, esto funcionó para mí, es decirSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
Andrew Mackrodt

@AndrewMackrodt lo que sugirió es la única solución que me ha funcionado (estoy ejecutando Jenkins en CentOS)
lax1089

12

(La siguiente solución es para Windows).

Una solución permanente es cambiar una línea [Jenkins directory]\jenkins.xml(para mí está en C:\Jenkins\jenkins.xml)

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

Agregue el siguiente argumento a la lista de argumentos separados por espacios en blanco:

-Dhudson.model.DirectoryBrowserSupport.CSP=

Luego, reinicie el servicio de Jenkins para recoger el cambio.


1
esa es la única respuesta que funciona para mí, también agregué -Dfile.encoding=UTF-8a los argumentos
Sasha Bond

9

Puede solucionar esto usando el comando groovy como se especifica en la respuesta de Vall .

El efecto está en su lugar hasta que Jenkins se reinicia y luego tienes que volver a hacerlo.

Una solución para resolver este problema es configurar un trabajo que haga esto por usted cada vez que se inicie jenkins.

Puede hacer esto usando el complemento Startup Trigger .

Después de instalarlo, cree un nuevo trabajo y tendrá una nueva casilla de verificación en la sección Build Triggers que tendrá que marcar.

Luego agregue un paso de compilación de script de Execute system Groovy con el comando:

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

Guarde y todo debería funcionar.


Con este método, también debe instalar el complemento Groovy, si aún no lo hizo. De lo contrario, el paso de compilación del script Ejecutar sistema Groovy no se mostrará entre las opciones de compilación.
Bálint Pap

5

Para la versión de Ubuntu 14, los complementos especiales fueron útiles:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - Para iniciar el trabajo en el inicio de jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - Para ejecutar el script System Groovy

E hice un trabajo, que comienza con el reinicio de Jenkins y establece el parámetro.

configurado para comenzar a compilar después de que se ejecute Jenkins

Y agregado el script Groovy del sistema para establecer los parámetros. Ejecutar el script System Groovy System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "caja de arena; img-src 'self';")


Aunque la ejecución del trabajo se completa correctamente, no habilita la visualización de CSS para mis informes. Ejecuté exactamente la misma secuencia de comandos maravillosa en la "Consola de secuencias de comandos" y funcionó bien. ¿Que más puedo hacer? El maravilloso guión de este trabajo no cambia la propiedad del padre real Jenkin.
frakman1

@ frakman1 en este momento mi script Groovy se ve así: System.setProperty ("hudson.model.DirectoryBrowserSupport.CSP", "") Pero eso es todo y todo funciona. ¿Quizás no tienes un usuario administrador?
abiab

Gracias por la respuesta. Eventualmente lo hice funcionar. Tuve que usar este script en su lugar: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

Ir

Administrar Jenkins -> Consola de secuencias de comandos

y escriba el siguiente comando:

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

luego presione Ejecutar. si obtiene el resultado como 'Resultado', vuelva a ejecutar la compilación, verifique el formato del informe HTML


1

Para configurar permanentemente, cree un archivo de script Groovy $ JENKINS_HOME / init.groovy , o cualquier archivo .groovy en el directorio $ JENKINS_HOME / init.groovy.d / con el siguiente contenido:

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

systemctl reiniciar jenkins

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


1

Abra el archivo jenkins.xml y copie los argumentos como se muestra a continuación. se arreglará permanentemente. Una vez hecho esto, reinicie su máquina.

<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

En CentOS , la siguiente solución (que se sugirió en los comentarios de otra respuesta) es la única que me ha funcionado:

  1. Vaya a: Administrar Jenkins> Administrar nodos y nubes
  2. Haga clic en el icono de engranaje en el lado derecho del nodo (de forma predeterminada, solo habrá un nodo llamado Maestro)
  3. Haga clic en 'Script Console' a la izquierda
  4. Ingrese lo siguiente en la ventana de la consola: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. Haga clic en Ejecutar
  6. Debería ver algún resultado en la sección Resultado, similar a la siguiente captura de pantalla:

Resultado de la consola de secuencia de comandos

Mi problema particular era que faltaban imágenes / css en los informes de Serenity BDD. Después de realizar estos pasos, mis informes de Serenity tenían todas las imágenes / css renderizadas correctamente, incluidos los informes de compilaciones que se habían ejecutado antes de este cambio. Esta solución también funcionará para cualquier informe basado en html publicado.


0

Es demasiado tarde para responder, pero pensé en compartir.

Estaba luchando con Jenkins implementado en Tomcat, intenté ejecutar el script, ayuda pero desaparece si se reinicia Tomcat.

Hizo la corrección permanente estableciendo la propiedad en catalina.properties en tomcat.

Archivo de propiedades: tomcat_installation_dir / conf / catalina.properties Simplemente copie y pegue la siguiente línea en catalina.properties al final (puede configurarlo en cualquier lugar para no alterar las propiedades existentes)

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

Tuve los mismos problemas después de agregar HTTPS a mis jenkins. En caso de que tenga el mismo problema, la solución es fácil: configure su URL de Jenkins para usar el protocolo HTTPS en lugar de HTTP. Se puede configurar a través de la configuración de jenkins -> url de jenkins


0

Para establecer la propiedad del sistema de forma permanente si usa Jenkins-X , cree el archivo myvalues.yamlen el directorio actual, con el siguiente contenido:

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

Luego reinicie la plataforma jenkins-x, lo que se puede hacer actualizándola:

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

Para evitar actualizar la plataforma, simplemente actualícela a la fuerza a la misma versión:

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

0

Para aquellos que están usando el asciidoctor-maven-plugincomplemento para producir un documento HTML a partir del archivo asciidoc para publicarlo en Jenkins, actualice la configuración del complemento, agregue el linkcssatributo:

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

-2

En Debian / Ubuntu , en instalaciones aptitude :

  • sudo vi /etc/default/jenkins
  • Agregar -Dhudson.model.DirectoryBrowserSupport.CSP=al JAVA_ARGS(por ejemplo JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Reiniciar jenkins - service jenkins restart

Esto fue suficiente para mí, pero para ver la lista completa de parámetros, vea esta respuesta .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.