2016-08-14 3 views
2

자바 이슈를 빌드하는 젠킨스 파이프 라인이 있는데 디렉토리에 복사 한 다음 외부 스크립트를 실행하려고 시도합니다.젠킨스 파이프 라인에서 스크립트 실행

java.io.IOException: Failed to mkdirs: /opt/[email protected]/durable-ae56483c 
:

나는 외부 스크립트

dir('/opt/script-directory') { 
    sh './run.sh' 
} 

스크립트입니다 단순한 고정 표시기 빌드 스크립트,하지만 빌드가이 예외로 을 실패를 실행하기 위해 파이프 라인 스크립트 내에서이 구문을 사용하고 있습니다

스크립트가 디렉토리를 만들지 않으므로 오류가 발생합니다. 그것은 단지 도커 이미지를 만들고 그 이미지에 새롭게 구축 된 자바 아티팩트를 배치하는 것입니다.

내가 으로 유일한 빌드 단계를 외부 스크립트를 실행 한 다음이 구문을 사용하여 내 파이프 라인 스크립트에서 해당 작업을 호출 젠킨스에서 다른 작업 작성하는 경우 :

build 'docker test build' 

모든 것이 잘 작동을 스크립트가 실행 다른 작업 및 파이프 라인 예상대로 계속됩니다.

작업 영역 외부에있는 스크립트를 실행하는 유일한 방법입니까?

파이프 라인 스크립트 내에서 스크립트를 실행하려는 시도가 잘못 되었습니까?

+0

디렉토리 ('/ tmp를') { 쉬 '/opt/script-directory/run.sh' 을 :

다른 해결 방법은 그것으로 sh을 실행, 현재 디렉토리를 변경하지 않는 것 } --- 그게 효과가 있니? – Jayan

+0

파일을 만드는 스크립트가 아닙니다. (나는 짐작한다) 젠킨스는 여기서 회복 정보를 저장하고있다. – Jayan

+0

예, 나는 그것이 무엇을하고 있는지 확실하지 않다. 스크립트를 간단히 에코로 변경했는데 같은 오류로 실패합니다. – Bltucker

답변

4

문제는 젠킨스 사용자 (또는 어떤 사용자가 해당이 젠킨스 슬레이브 프로세스를 실행입니다)이 /opt에 쓰기 권한이 없음을하고 sh 단계는 거기 [email protected]/durable-ae56483c 하위 디렉토리를 만들려고합니다.

0

버그처럼 보이는 (보안상의 이유로 바람직하지)

sh '/opt/script-directory/run.sh' 

또는 /opt 폴더로 젠킨스 사용자에게 쓰기 권한을 부여 :

중 하나 dir 블록을 제거하고 스크립트의 절대 경로를 사용 Jenkins에서 durable 디렉토리는 복구 정보를 저장하기위한 디렉토리입니다. sh을 사용하여 외부 스크립트를 실행하십시오. 지금 할 수있는 일은 /opt/script-directory+w+x이 젠킨스 사용자로 설정되어 있는지 확인하는 것입니다.

sh '/opt/script-directory/run.sh 
관련 문제