2012-03-20 12 views
7

Sto tentando di configurare un ambiente CI per un'applicazione iOS. Finora ho ottenuto xcodebuild per costruire la build di test correttamente dalla riga di comando, ma quando Jenkins tenta di eseguirlo ottengo il seguente letta in console:Jenkins Impossibile eseguire xcodebuild dalla cartella del progetto

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) 

Qualche idea? Sono abbastanza nuovo per Jenkins ma ho fatto del mio meglio per rispondere a questa domanda con Google Fu senza alcun risultato. Inizialmente ho avuto questo problema con un'installazione manuale di Jenkins (homebrew tecnicamente), ma di recente ho usato il programma di installazione OSX e ha provocato lo stesso errore.

Sto indovinando questo ha più a che fare con i permessi Unix/Linux/OSX di Jenkins/Xcode, ma non ho abbastanza esperienza per stabilire che, per certo.

Modifica

progetto permessi di directory impostate su 775.

Ho anche provato a cambiare la proprietà per l'utente Jenkins viene eseguito su.

ecco l'output per quando ho tentato di correre xcodebuild come utente daemon ($ sudo -u demone 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) 

risposta

5

Assicurarsi che l'utente con cui viene eseguito Jenkins ha i permessi giusti. Vai a http://[jenkins_server]/systemInfo e cerca user.name.

+0

Puoi descrivere quali sono le autorizzazioni "giuste"? xcodebuild ha 755 che penso possa consentire a qualsiasi utente di eseguire il programma da qualsiasi directory. La directory del progetto ha anche 755 permessi. L'utente Jenkins è l'utente daemon. – cesarislaw

+0

Quello che volevo dire in realtà è che dovresti eseguire Jenkins con l'utente che possiede la directory. In alternativa, rendilo scrivibile. –

+0

Ho provato entrambi in vari punti. Controllato di nuovo (imposta le autorizzazioni della directory su 775 e la proprietà all'utente del daemon) e ottenendo comunque l'errore di autorizzazione negato. – cesarislaw

0

Sopra di esso si legge:

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

In qualche modo l'esecuzione del lavoro è saltato in una directory "sbagliato". Forse hai impostato il lavoro con uno spazio di lavoro personalizzato? Jenkins è probabilmente in esecuzione come demone utente e quindi non ha accesso ai file sotto l'utente iosappdev.

Il modo usuale di utilizzare Jenkins è affidare il codice sorgente a un repository di controllo della versione. I lavori di Jenkins sono quindi configurati per controllare il codice dal repository nello spazio di lavoro di Jenkins e crearlo lì, quindi riportare i risultati.

Non sono sicuro di cosa si possa ottenere provando a far saltare direttamente Jenkins nella directory di lavoro e creare la build lì. Se è davvero ciò che stai cercando di fare, devi dirci perché pensi che sia una buona idea.

+0

Un po 'tardi per un commento ma ... Sto vivendo la stessa cosa. Penso che la ragione è che il plugin xcode ti permette di specificare una "Directory del progetto Xcode" e sta cambiando la directory di lavoro con quella. Sono in esecuzione 1.512 su OSX e jenkins è in esecuzione come utente "jenkins", quindi non penso che abbia il permesso di accedere ai file sotto la mia directory utente proprio come l'OP. C'è un modo per far funzionare Jenkins in questi limiti? Preferirei non dover impostare VC per eseguire solo una build di jenkins. Dovrebbe essere possibile usare jenkins per build senza un sistema VC. – Tony

Problemi correlati