2014-05-13 2 views
6

나는이 매우 유사한 질문이 있습니다 Reading file from Workspace in Jenkins with Groovy script읽기 파일

그러나 나는 시스템 그루비 스크립트에서 파일을 읽을 필요가 그렇게 텍스트 찾기 또는 그루비 PostBuild를 사용하는 솔루션 플러그인이 작동하지 않습니다.

시스템 Groovy 스크립트에서 작업 경로를 가져 오는 방법은 무엇입니까? 나는 다음을 시도했다 :

System.getenv('WORKSPACE') 
System.getProperty("WORKSPACE") 
build.buildVariableResolver.resolve("WORKSPACE") 

고마워!

답변

8

각 빌드는 작업 공간이므로 원하는 프로젝트를 먼저 찾아야합니다. (용어 "작업"과 "프로젝트가"젠킨스 오히려 상호 교환 사용된다 -. 또한 API에서)

그 후, 당신은 당신의 손가락을 교차 그냥되지 않습니다 getWorkspace()를 호출 할 수 있습니다 (자세한 내용은 JavaDoc 참조) .

또는 당신은 그것이 AbstractBuild 클래스에 정의 된대로 당신에게 getWorkspace() 방법을 통해 특정 빌드에 사용되는 작업 공간을 제공 할 수 있습니다 (예를 들어, 마지막) 특정 빌드를 찾을 수 있습니다.

예제 코드 :

Jenkins.instance.getJob('<job-name>').lastBuild.workspace; 
7

당신은 당신이 끝내 시스템으로 실행하려는 "sysgvy.groovy"라는 스크립트와 함께 당신의 작업 공간에서 "a.txt이"라는 파일이있는 경우 스크립트. "sysgvy.groovy"스크립트가 "a.txt"파일을 읽어야한다고 가정하십시오.

이 주제는 스크립트가 경로를 제공하지 않고 "a.txt"를 직접 읽으면 "sysgvy.groovy"가 실행되고 "a.txt"를 찾을 수 없다는 오류가 발생합니다.

나는 테스트를 통해 다음 방법이 효과가 있다는 것을 발견했습니다.

def build = Thread.currentThread().executable 

그런 다음 "a.txt이"를 대체 할 위치의 전체 문자열로

build.workspace.toString()+"\\a.txt" 

를 사용합니다.

"a.txt"및 "sysgvy.groovy"를 Jenkins 마스터 시스템의 작업 공간에 배치하여 Jenkins 마스터 시스템에서 실행하는 것도 중요합니다. 슬레이브 머신에서 실행이되지 않습니다.

시도해보십시오. 파일을 찾아서 스크립트에서 아무 문제없이 읽어야합니다.

변수 스레드에 문제가있는 경우 일부 모듈을 가져와야한다는 것입니다. 따라서 코드 시작 부분에 다음 줄을 추가하십시오.

import jenkins.* 
import jenkins.model.* 
import hudson.* 
import hudson.model.* 
+0

filename = build.workspace.toString() + "/ a.txt"; myFile = 새 파일 (파일 이름); data = myFile.readLines(); println data; – gaoithe

+0

groovy.lang.MissingPropertyException : 해당 속성 없음 : 클래스 실행 파일 : java.lang.Thread – saikosen