2012-03-20 1 views
7

iOS 응용 프로그램의 CI 환경을 설정하려고합니다. 지금까지 나는 명령 줄에서 제대로 테스트 빌드를 구축 xcodebuild 왔하지만 젠킨스가하려고 할 때 나는 콘솔에서 다음 읽기 얻을 그것을 실행 :Jenkins가 프로젝트 폴더에서 xcodebuild를 실행할 수 없음

Started by user anonymous 
Building in workspace /Users/Shared/Jenkins/Home/jobs/Unit Tests/workspace 
Working directory is /Users/iosappdev/Documents/Xcode Projects/rules. 
[rules] $ /usr/bin/xcodebuild -version 
FATAL: Cannot run program "/usr/bin/xcodebuild" (in directory "/Users/iosappdev/Documents/Xcode Projects/rules"): error=13, Permission denied 
java.io.IOException: Cannot run program "/usr/bin/xcodebuild" (in directory "/Users/iosappdev/Documents/Xcode Projects/rules"): error=13, Permission denied 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at hudson.Proc$LocalProc.<init>(Proc.java:244) 
    at hudson.Proc$LocalProc.<init>(Proc.java:216) 
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:707) 
    at hudson.Launcher$ProcStarter.start(Launcher.java:338) 
    at hudson.Launcher$ProcStarter.join(Launcher.java:345) 
    at au.com.rayh.XCodeBuilder.perform(XCodeBuilder.java:224) 

어떤 생각을? 나는 Jenkins에게 상당히 새로운 것이지만, Google Fu와 함께이 질문에 아무런 답변을하지 않으려 고 최선을 다했습니다. 나는 Jenkins (기술적으로 자생적)의 수동 설치로 원래이 문제에 부딪 혔지만 최근에 OSX 설치 프로그램을 사용하여 동일한 오류가 발생했습니다.

저는 이것이 Jenkins/Xcode보다 Unix/Linux/OSX 사용 권한과 관련이 있다고 추측하고 있지만이를 확인하기에는 충분한 전문 지식이 없습니다.

편집

프로젝트 디렉토리 권한은 또한 젠킨스가 실행되는 사용자에게 소유권을 변경하려고했습니다 775

로 설정합니다.

dev-imac:rules iosappdev$ sudo -u daemon xcodebuild 
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied 
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied 
2012-03-21 11:05:46.161 xcodebuild[1411:70b] [MT] DVTAssertions: ASSERTION FAILURE in /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-1196/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/Xcode3Model/Xcode3Project.m:266 
Details: Assertion failed: [directoryPath isAbsolutePath] 
Object: <Xcode3Project> 
Method: +projectFilesInDirectory: 
Thread: <NSThread: 0x40010a260>{name = (null), num = 1} 
Hints: None 
Backtrace: 
    0 0x000000010025b85f -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:messageFormat:arguments:] (in DVTFoundation) 
    1 0x000000010025b6b5 _DVTAssertionFailureHandler (in DVTFoundation) 
    2 0x00000001011559bc +[Xcode3Project projectFilesInDirectory:] (in DevToolsCore) 
    3 0x00000001008a424b -[Xcode3CommandLineBuildTool _resolveInputOptions] (in Xcode3Core) 
    4 0x00000001008aa097 -[Xcode3CommandLineBuildTool run] (in Xcode3Core) 
    5 0x00000001001d7db6 (in xcodebuild) 
    6 0x00000001001d7c2c (in xcodebuild) 

답변

5

은 젠킨스가 실행되는 사용자가 올바른 권한이 있는지 확인하십시오 :

는 여기에 내가 데몬 사용자 ($ sudo는 -u 데몬 xcodebuild)로 xcodebuild 실행 시도 할 때의 출력입니다. http://[jenkins_server]/systemInfo으로 이동하여 user.name을 검색하십시오. 위

+0

"올바른"권한/모양이 무엇인지 설명해 주시겠습니까? xcodebuild는 모든 사용자가 어떤 디렉토리에서든 프로그램을 실행할 수있게 해줄 것이라고 생각합니다. 프로젝트 디렉토리에는 755 개의 권한이 있습니다. Jenkins 사용자는 데몬 사용자입니다. – cesarislaw

+0

내가 실제로 의미 한 것은 당신이 젠킨스를 그 디렉토리를 소유 한 사용자와 함께 실행해야한다는 것이다. 또는 쓰기 가능으로 설정하십시오. –

+0

나는 여러 가지 점에서 두 가지를 시도했다. 다시 검사 (디렉토리 사용 권한을 775로 설정하고 소유권을 데몬 사용자에게 설정)하고 권한 거부 오류가 계속 발생합니다. – cesarislaw

0

Building in workspace /Users/Shared/Jenkins/Home/jobs/Unit Tests/workspace Working directory is /Users/iosappdev/Documents/Xcode Projects/rules. [rules] $ /usr/bin/xcodebuild -version

어떻게 든 작업 실행은 "잘못"디렉토리에 올랐다. 어쩌면 커스텀 작업 공간으로 작업을 설정했을 수도 있습니다. Jenkins는 아마도 사용자 데몬으로 실행 중이므로 iosappdev 사용자의 파일에 대한 액세스 권한이 없습니다.

젠킨스를 사용하는 일반적인 방법은 소스 코드를 버전 관리 저장소에 커밋하는 것입니다. 그런 다음 Jenkins 작업은 저장소의 코드를 Jenkins 작업 영역으로 체크 아웃하고 거기에 빌드 한 다음 결과를 다시보고하도록 구성됩니다.

Jenkins가 작업 디렉토리로 직접 이동하여 빌드를 수행하여 무엇을 얻을 수 있는지 확신하지 못합니다. 이것이 정말로 당신이하려는 일이라면, 그것이 좋은 생각이라고 생각하는 이유를 말해 주어야합니다.

+0

의견에 조금 늦지 만 ... 나는 똑같은 것을 경험하고있다. 이유는 xcode 플러그인을 사용하면 "Xcode Project Directory"를 지정하고 작업 디렉토리를 변경한다는 것입니다. 저는 OSX에서 1.512를 실행 중이며 jenkins는 사용자 "jenkins"로 실행 중이므로 OP와 마찬가지로 내 사용자 디렉토리 아래에있는 파일에 액세스 할 권한이 없다고 생각합니다. 젠킨스가 이러한 제약 조건 하에서 작동하도록하는 방법이 있습니까? 차라리 젠킨스 빌드를 실행하기 위해 VC를 설정하지 않아도됩니다. VC 시스템이없는 빌드에는 jenkins를 사용할 수 있어야합니다. – Tony