2017-12-12 3 views
0

내 빌드를 수행 할 일부 함수가 포함 된 외부 Groovy 스크립트를로드한다는 점에서 Jenkins 파이프 라인 스크립트가 있습니다. 누군가가 로컬 컴퓨터에서 빌드를 실행하면 Jenkins 외부에서 사용하기를 원하기 때문에 이러한 함수는 평범해야합니다.젠킨스 파이프 라인에서 사용되는 groovy 스크립트에서 쉘 명령어 호출

이 함수들에서는 쉘 명령을 실행하고 결과를 평가해야합니다. Groovy와 같은 함수를 호출하면 잘 작동합니다.

def SomeFunction() { 
    def result = "Some shell command".execute().text 
} 

그러나이 실행 방법은 파이프 라인 스크립트에서 작동하지 않습니다. "bat/sh"는 파이프 라인 스크립트 전용이므로 사용할 수 없으며 함수가 일반 Groovy에서도 작동하기를 원합니다.

어떻게 해결할 수 있습니까?

+0

.text를 제거해야한다고 생각합니다. 작동하도록되어 있습니다. –

답변

1

Jenkins Pipeline Groovy를 일반 Groovy 코드로 취급하지 마십시오. 모든 파이프 라인 그루비 (지금 현재)는 항상 Jenkins 마스터에서 실행됩니다. .execute()은 Jenkins 스크립트 보안 제한으로 인해 예상되는 위치에서 실행되지 않으며, Jenkins의 CPS 변환 Groovy 엔진은 파이프 라인 코드에서 전체 Groovy 언어를 사용할 수 없기 때문에 모든 이유가 있습니다. 여기

스티븐 코놀리에 의한 relevant post from Google Groups입니다 :

파이프 라인은 끝내 하지입니다.

그것은 그루비의 상단에 내장 된 CPS 엔진이 ...이, 그것도 때로는 걸어 그루비 같은 돌팔이 수 있습니다 그루비처럼 보일 수 있지만, 당신은 그냥 하지 것을 받아 들인다면, 여러분의 인생을 무한히 더 좋을 것입니다 그루비.

글로벌 공유 라이브러리 (Global Shared Libraries)는 관용구 그루비를 쓰고 싶다면 거기 에다 CPS 마법과 그 전체적인 함축을 진정으로 이해하지 않으면 문제가 발생할 수 있습니다. 최종 오케스트레이션 접착제 층과 당신의 생활로

를 사용하여 파이프 라인은 훨씬 쉽게 될 것입니다

나는 당신이 정상 그루비 코드와 파이프 라인의 코드를 치료하지 말아야 것을 증명해야 당신이 그 전체 스레드를 읽을 것을 권장합니다.

관련 문제