2016-10-02 2 views
1

새 빌드를 설정하고 있습니다. 아래와 같이 완벽하게 간단한 쉘 명령 작업을 실행 : 난 그냥 조금 일을 neaten하는 자신의 클래스로에 "패키지"내 쉘 스크립트를 시도하고있다jenkinsfile에서 사용자 정의 클래스로 이동하면 명령이 실패합니다.

stage("Demo") {  
    sh "echo 'Hi There'" 
} 

.

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException : 분류되지 않은 방법 java.lang.Class의 문제는 클래스 내에서 똑같은 쉘 스크립트를 실행하려고 할 때, 젠킨스가 함께 빌드 실패하다 SH java.lang.String의는

이 자신의 클래스로 위의 방법을 이동 한 후 나를 위해 실패 간단한 예입니다 :

stage('Demo stage') { 
    Tools.PrintMe("Hi There") 
} 

public class Tools { 
    public static void PrintMe(String message) { 
     sh "echo " + message 
    } 
} 

또한 스크립트 manag을 제공 옵션이 없습니다 이 거부 된 메소드를 허용 목록에 추가하십시오.

이 문제를 해결할 방법이 있습니까? 아니면 제가 모르는 한계가 있습니까?

답변

3

@Crait 자신의 클래스에서 미리 정의 된 단계를 호출하려면 스크립트 객체를 클래스에 전달해야합니다.

그래서,이 시도 :

stage('Demo stage') { 
    Tools.PrintMe(this, "Hi There") 
} 

public class Tools { 
    public static void PrintMe(def script, String message) { 
     script.sh "echo " + message 
    } 
} 
3

@sshepel 위에서 지적한 바와 같이, 일반 스크립트에서 실행되는 코드는 클래스 내부의 코드와 같은 맥락에 있지 않습니다. 위와 비슷한 방법으로 스크립트 객체에 대한 정적 참조를 작성한 다음이를 내 클래스에서 실행하여 해결했습니다.

//Set the static reference in the script 
Script.environment = this 

public class Script { 
    public static environment 
} 

public class Tools { 
    public static void PrintMe(String message) { 
     Script.environment.sh "echo " + message 
    } 
} 

스크립트 개체를 전달할 때 메소드 서명이 오염되는 것을 방지하기 위해이 방법을 사용했습니다. 단점은 모든 클래스가 "Script.environment = this"를 설정하는 데 종속된다는 것입니다.

관련 문제