2012-03-20 13 views
7

Próbuję skonfigurować środowisko CI dla aplikacji na iOS. Do tej pory stałam xcodebuild zbudować build testowy prawidłowo z wiersza polecenia, ale gdy Jenkins próbuje wykonać go pojawia się następujący odczytać w konsoli:Jenkins nie może uruchomić xcodebuild z folderu projektu

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) 

jakieś przemyślenia? Jestem całkiem nowy w Jenkins, ale zrobiłem co mogłem, aby odpowiedzieć na to pytanie z Google Fu bezskutecznie. Pierwotnie napotkałem ten problem z ręczną instalacją Jenkinsa (homebrew technicznie), ale ostatnio użyłem instalatora OSX i spowodowało to ten sam błąd.

Zgaduję, że ma to więcej wspólnego z uprawnieniami Unix/Linux/OSX niż Jenkins/Xcode, ale nie ma wystarczającej wiedzy, aby to ustalić.

Edycja uprawnienia katalogu

projektu ustawiona na 775.

Ja również próbował zmianę własności do użytkownika Jenkins biegnie dalej.

Oto wyjście, gdy próbowałem uruchomić xcodebuild jako użytkownik demona ($ sudo -u demon xcodebuild):

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) 

Odpowiedz

5

upewnić, że użytkownik w ramach którego działa Jenkins ma odpowiednie uprawnienia. Przejdź do strony http://[jenkins_server]/systemInfo i wyszukaj numer user.name.

+0

Czy możesz opisać, jak wyglądają "odpowiednie" uprawnienia? xcodebuild ma 755, co według mnie pozwoliłoby każdemu użytkownikowi uruchomić program z dowolnego katalogu. Katalog projektu ma również 755 uprawnień. Użytkownik Jenkinsa jest użytkownikiem demona. – cesarislaw

+0

Co właściwie miałem na myśli to, że należy uruchomić Jenkinsa z użytkownikiem, który jest właścicielem katalogu. Możesz też zrobić zapis. –

+0

Próbowałem obu w różnych punktach. Sprawdzono ponownie (ustawiono uprawnienia do katalogu na 775 i prawa własności do użytkownika demona) i wciąż otrzymywałem błąd odmowy uprawnień. – cesarislaw

0

Nad nim brzmi:

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

Jakoś wykonanie pracy wzrósł w "złym" katalogu. Być może ustawiłeś zadanie w niestandardowym obszarze roboczym? Jenkins prawdopodobnie działa jako demon użytkownika i dlatego nie ma dostępu do plików pod użytkownikiem iosappdev.

Typowym sposobem korzystania z Jenkins jest przekazanie kodu źródłowego do repozytorium kontroli wersji. Zadania Jenkinsa są następnie skonfigurowane do sprawdzania kodu z repozytorium w przestrzeni roboczej Jenkins i budowania go tam, a następnie raportowania wyników.

Nie jestem pewien, co można osiągnąć, próbując skłonić Jenkinsa do bezpośredniego przejścia do katalogu roboczego i wykonania tam kompilacji. Jeśli tak naprawdę chcesz to zrobić, musisz nam powiedzieć, dlaczego uważasz, że to dobry pomysł.

+0

Trochę za późno na komentarz, ale ... Przeżywam to samo. Myślę, że powodem jest to, że wtyczka xcode pozwala określić "Katalog projektu Xcode" i zmienia katalog roboczy na ten. Używam 1.512 na OSX i jenkins działa jako użytkownik "jenkins", więc nie sądzę, że ma uprawnienia dostępu do plików w moim katalogu użytkownika, tak jak OP. Czy istnieje sposób, aby zmusić jenkinsa do pracy wbrew tym ograniczeniom? Wolałbym nie skonfigurować VC, aby uruchomić kompilację Jenkinsa. Powinno być możliwe użycie jenkinsa do budowy bez systemu VC. – Tony

Powiązane problemy