Jenkins-HTML 게시자 플러그인-Jenkins 서버에서 보고서를 볼 때 CSS가 표시되지 않음


92

Jenkins HTML Publisher 플러그인에 이상한 문제가 있는데, Jenkins에서 볼 때 보고서에 추가 한 모든 멋진 CSS가 제거됩니다. 보고서를 로컬로 다운로드하면 CSS 형식을 볼 수 있습니다. Jenkins에 CSS를 볼 수있는 설정이 있습니까?

Jenkins의 내 HTML 게시자 설정 :

여기에 이미지 설명 입력

Jenkins에 표시 될 때 내 보고서 페이지 :

여기에 이미지 설명 입력

로컬에 표시 될 때 내 보고서 페이지 :

여기에 이미지 설명 입력



2
모든 사람들은 콘텐츠 보안 정책이 처음에 왜 거기에 있는지에 대한 생각없이 콘텐츠 보안 정책을 비활성화하여 "수정"한다고 말합니다. 빌드 할 변경 사항에 영향을 미칠 수있는 사람은 누구나 관리자 자격 증명을 탈취하고 전체 Jenkins 클러스터에 대한 액세스 권한을 얻을 수 있습니다. 인라인 CSS는주의하면 대부분 안전하지만 스크립트를 허용하는 것은 재앙입니다.
OrangeDog

답변:


174

문제를 파악했습니다. 다른 사용자를 위해 여기에서 공유합니다.

Jenkins의 콘텐츠 보안 정책으로 인해 CSS가 제거되었습니다. ( https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy )

기본 규칙은 다음과 같이 설정됩니다.

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

이 규칙 세트의 결과는 다음과 같습니다.

  • 자바 스크립트가 전혀 허용되지 않음
  • 플러그인 (객체 / 포함)이 허용되지 않음
  • 인라인 CSS 또는 다른 사이트의 CSS는 허용되지 않습니다.
  • 다른 사이트의 이미지는 허용되지 않습니다.
  • 허용되는 프레임 없음
  • 허용되는 웹 글꼴 없음
  • XHR / AJAX는 허용되지 않습니다.

이 규칙을 완화하려면 다음으로 이동하십시오.

  1. Jenkins 관리->
  2. 노드 관리->
  3. 설정 (톱니 바퀴 아이콘)-> 클릭
  4. 왼쪽의 스크립트 콘솔을 클릭하고 다음 명령을 입력하십시오.

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

그리고 실행을 누릅니다. 출력이 "결과"헤더 아래에 '결과 :'로 표시되면 보호가 비활성화 된 것입니다. 빌드를 다시 실행하면 보관 된 새 HTML 파일에 CSS가 활성화되어 있음을 알 수 있습니다.


1
감사합니다!!! 젠킨스와 관련된 CSS 문제를 해결하는 데 정말 도움이되었습니다.
Eyal Sooliman

1
@Steerpike 나는 당신이 의미하는 바를 궁금해 한 다음 Jenkins를 다시 시작할 때 CSS가 차단되었음을 알았습니다. 그래서 저는 12 시간마다 명령을 실행하는 Jenkins 작업을 만들었습니다. 트릭을 할 것 같습니다.
Aeropher 2016

@ Aeropher 감사합니다-저는 Jenkins 초보자입니다-어떻게 그 일을 설정합니까? Windows 배치 명령을 실행하는 빌드 단계로 일반 작업을 설정 하시겠습니까?
Steerpike

3
@Steerpike 맞습니다. 그루비 명령을 제외하고는 "시스템 그루비 스크립트 실행"빌드 단계에서 실행해야합니다. 그런 다음 "Build Triggers"섹션에서 다음 값으로 "Build Periodically"를 선택했습니다. H 12 * * *
Aeropher

실제로 빌드를 다시 실행할 필요도 없습니다. Jenkins에서 생성 된 HTML을 다시로드하기 만하면 정책 변경의 영향을받습니다.
hshib

22

에서 가상 코어 , 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:;\""

젠킨스 서버를 다시 시작한 후에도 작동합니다.


지령

default-src : default-src는 JavaScript, 이미지, CSS, 글꼴, AJAX 요청, 프레임, HTML5 미디어와 같은 콘텐츠를로드하기위한 기본 정책입니다.

img-src : 유효한 이미지 소스를 정의합니다.

소스 값

'self'- 동일한 출처 (동일한 체계, 호스트 및 포트)에서 리소스를로드 할 수 있습니다.

사용법 : default-src 'self'

'안전하지 않은 인라인은' - 의 URI : 같은 스타일 속성의 onclick 또는 스크립트 태그의 몸 인라인 소스 요소의 사용과 자바 스크립트합니다 (이 적용되는 소스의 상황에 따라 다름) 할 수 있습니다.

사용법 : default-src 'unsafe-inline'

'안전 - 평가는' - ) (자바 스크립트의 평가 동적으로 안전하지 않은 코드를 평가할 수있다

사용법 : default-src 'unsafe-eval'

데이터 : - 데이터 체계를 통해 리소스를로드 할 수 있습니다 (예 : 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>(내장 된 plantuml 다이어그램에 대한 대화 형 asciidoctor 스프링-레스트 문서의 결과) 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'\'';"'
Lubo

1
큰! --env JAVA_OPTS = "..."와 함께 docker에도 사용할 수 있습니다.
smelm

1
우분투 설치 vi /etc/default/jenkins를 위해 변수와 함께 사용 했습니다JAVA_ARGS
mRyan

14

“Manage Jenkins”->“Script console”로 이동하여 아래 명령을 실행하십시오.

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

3
이것은 나를 위해 일한 kithinkmatthew 언급 값, 즉 두 번째 PARAM 수정 후System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
앤드류 Mackrodt을

@AndrewMackrodt 당신이 제안한 것은 나를 위해 일한 유일한 솔루션입니다 (나는 CentOS에서 Jenkins를 실행 중입니다)
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논쟁에 추가 했습니다
Sasha Bond

9

Vall에 지정된대로 groovy 명령을 사용하여이 문제를 해결할 수 있습니다. 의 답변에 .

효과는 Jenkins가 다시 시작될 때까지 적용되며 나중에 다시 수행해야합니다.

이 문제를 해결하는 해결책은 젠킨스가 시작될 때마다이를 수행 할 작업을 구성하는 것입니다.

시작 트리거 플러그인 을 사용하여이 작업을 수행 할 수 있습니다 .

설치 후 새 작업을 만들고 확인해야 할 빌드 트리거 섹션 아래에 새 확인란이 생깁니다 .

그런 다음 다음 명령으로 Execute system Groovy 스크립트 빌드 단계를 추가합니다.

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

저장하면 모든 것이 작동합니다.


이 방법을 사용하면 Groovy 플러그인도 설치해야합니다 (아직 설치하지 않은 경우). 그렇지 않으면 시스템 Groovy 스크립트 빌드 단계 실행이 빌드 옵션에 표시되지 않습니다.
Bálint Pap

5

우분투 14 버전의 경우 특별한 플러그인이 유용했습니다.

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger- 젠킨스 시작시 작업 시작

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin-System Groovy 스크립트 실행

그리고 Jenkins를 다시 시작하고 매개 변수를 설정하는 작업을 수행했습니다.

Jenkins가 실행 된 후 빌드를 시작하도록 설정

그리고 parametr를 설정하기 위해 시스템 Groovy 스크립트를 추가했습니다. 시스템 Groovy 스크립트 실행 System.setProperty ( "hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")


작업 실행이 성공적으로 완료되었지만 내 보고서에 대한 CSS 표시를 활성화하지 않습니다. "스크립트 콘솔"에서 똑같은 그루비 스크립트를 실행했는데 제대로 작동했습니다. 그 밖에 무엇을 할 수 있습니까? 이 작업의 그루비 스크립트는 실제 부모 Jenkin의 속성을 변경하지 않습니다.
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

이동

Jenkins 관리-> 스크립트 콘솔

다음 명령을 입력하십시오.

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

그런 다음 실행을 누릅니다. '결과'로 출력을 받으면 HTML 보고서 형식을 확인하여 빌드를 다시 실행하십시오.


1

그루비 스크립트 파일 영구적으로 설정 작성을 위해 $ 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. 노드의 오른쪽에있는 기어 아이콘을 클릭합니다 (기본적으로 마스터라는 노드가 하나만 있음).
  3. 왼쪽의 '스크립트 콘솔'을 클릭하십시오.
  4. 콘솔 창에 다음을 입력하십시오. System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. 실행을 클릭하십시오.
  6. 아래 스크린 샷과 유사한 결과 섹션에 일부 출력이 표시되어야합니다.

스크립트 콘솔 결과

내 특정 문제는 Serenity BDD 보고서에서 이미지 / css가 누락되었습니다. 이 단계를 수행 한 후 내 Serenity 보고서에는 이 변경 이전 에 실행 된 빌드의 보고서를 포함하여 모든 이미지 / css가 제대로 렌더링 되었습니다. 이 솔루션은 게시 된 모든 HTML 기반 보고서에도 적용됩니다.


0

응답하기에는 너무 늦었지만 공유 할 생각입니다.

Tomcat에 배포 된 Jenkins와 씨름하고 스크립트 실행을 시도했지만 도움이되지만 Tomcat이 재부팅되면 사라집니다.

tomcat의 catalina.properties에 속성을 설정하여 영구적으로 수정했습니다.

속성 파일 : tomcat_installation_dir / conf / catalina.properties 마지막에 catalina.properties에 아래 줄을 복사하여 붙여 넣으십시오 (기존 속성을 엉망으로 만들지 않도록 어디에서나 설정할 수 있음).

-Dhudson.model.DirectoryBrowserSupport.CSP = ""


0

내 젠킨스에 HTTPS를 추가 한 후에도 동일한 문제가 발생했습니다. 동일한 문제가 발생하는 경우 해결책은 쉽습니다. Jenkins URL을 HTTP 대신 HTTPS 프로토콜을 사용하도록 설정하십시오. 젠킨스 구성-> 젠킨스 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플러그인을 사용 하여 asciidoc 파일에서 HTML 문서를 생성하여 Jenkins에 추가로 게시하는 경우 플러그인 구성을 업데이트하고 linkcss속성을 추가 합니다.

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

-2

데비안 / 우분투 에서 적성 설치 :

  • sudo vi /etc/default/jenkins
  • 추가 -Dhudson.model.DirectoryBrowserSupport.CSP=받는 사람 JAVA_ARGS(예를 들어 JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=")
  • Jenkins 다시 시작- service jenkins restart

이것은 나에게 충분했지만 매개 변수의 전체 목록은 this answer를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.