2014-11-11 10 views
5

sto usando il seguente comando per eseguire i test:Impossibile eseguire test da riga di comando tramite xcodebuild su Jenkins

xcodebuild test -workspace MyApp.xcworkspace -scheme MyScheme -destination 'platform=iOS Simulator,name=iPhone 6,OS=8.1' 

Questo funziona bene a livello locale, ma quando provo questo su Jenkins non riesce con il seguente errore:

xcodebuild test -workspace MyApp.xcworkspace -scheme MyScheme -destination 'platform=iOS Simulator,name=iPhone 6,OS=8.1'

xcodebuild: error: Unable to find a destination matching the provided destination specifier: { platform:iOS Simulator, OS:8.1, name:iPhone 6 }

The requested device could not be found because no available devices matched the request.

Available destinations for the "MyScheme" scheme:

Build step 'Execute shell' marked build as failure

Finished: FAILURE

Così ho lanciato Xcode GUI su Jenkins per verificare se il simulatore di iPhone 6 è presente, ed è lì. Un'altra cosa interessante è quando si esegue lo stesso comando xcodebuild senza specificare il nome e il sistema operativo per la destinazione sul mio locale, ho l'elenco di tutti i simulatori disponibili, in questo modo:

Available destinations for the "MyScheme" scheme: { platform:iOS Simulator, id:683233C4-EC2B-48A3-826B-10EF62A875CD, OS:8.1, name:iPad 2 } { platform:iOS Simulator, id:6358A6F5-2FD0-4377-BD32-0A2C3329276D, OS:8.1, name:iPad Air } { platform:iOS Simulator, id:224533ED-94DA-46CC-B1DB-1781A1C80710, OS:8.1, name:iPad Retina } { platform:iOS Simulator, id:D114BC7E-A913-4063-A349-C119BAFC06DA, OS:8.1, name:iPhone 4s } { platform:iOS Simulator, id:7AF6D6F4-C6BC-4A47-B83C-3A4B43ABE0DD, OS:8.1, name:iPhone 5 } { platform:iOS Simulator, id:BE82D607-466A-43E5-863D-6A05F217C117, OS:8.1, name:iPhone 5s } { platform:iOS Simulator, id:0AFCC9AB-7C59-48C7-9BFB-FBF4865B7A63, OS:8.1, name:iPhone 6 Plus } { platform:iOS Simulator, id:D183FF05-3023-4FB5-BEA0-290EA881040A, OS:8.1, name:iPhone 6 } { platform:iOS Simulator, id:26038DBD-791C-421E-99F4-9153CA726A2F, OS:8.1, name:Resizable iPad } { platform:iOS Simulator, id:31B2F0AE-3547-4189-A561-CD2088F6C645, OS:8.1, name:Resizable iPhone }

Ma quando faccio lo stesso sulla Jenkins, questa lista è vuota.

Sto usando Xcode versione 6.1 (6A1052d) sia su locale che su Jenkins, i miei schemi sono condivisi correttamente in modo da poterli vedere nella GUI quando la lancio sul Jenkins. Non sono sicuro che sia pertinente, ma sto utilizzando il plug-in di pulizia dell'area di lavoro e rimuovo tutti i dati derivati ​​prima di creare su Jenkins.

Edit: ho scoperto che quando anteponendo il valore di destinazione con generico/ ottengo la lista simulatore adeguata sul Jenkins, si lamenta ancora che non riuscivo a trovare il simulatore per funzionare su, anche se il quello che ho usato è sulla lista:

xcodebuild test -workspace MyApp.xcworkspace -scheme MyScheme -destination 'generic/platform=iOS Simulator,name=iPhone 6,OS=8.1'

xcodebuild: error: Unable to find a destination matching the provided destination specifier: { platform:iOS Simulator, OS:8.1, name:iPhone 6 }

The requested device could not be found because no available devices matched the request.

Available destinations for the "MyScheme" scheme: { platform:iOS Simulator, id:20D0A659-A25A-40E1-9C11-FC6ECA004012, OS:8.1, name:iPad 2 } { platform:iOS Simulator, id:7B5DF104-BE34-415F-8818-3907B6CB9C63, OS:8.1, name:iPad Air } { platform:iOS Simulator, id:2DDF024E-811D-4D93-BD8E-EF34BFC9D8CA, OS:8.1, name:iPad Retina } { platform:iOS Simulator, id:FFE95D35-B9DD-449E-83D0-50777BF5B783, OS:8.1, name:iPhone 4s } { platform:iOS Simulator, id:EF5A0D8A-6A1F-492C-B451-8F3B8B5EC5EE, OS:8.1, name:iPhone 5 } { platform:iOS Simulator, id:A1FCF8DA-BD9F-4ABC-8E0A-4B8547362274, OS:8.1, name:iPhone 5s } { platform:iOS Simulator, id:1B75E350-7FC8-4407-8116-F3674F3AC187, OS:8.1, name:iPhone 6 Plus } { platform:iOS Simulator, id:694CAA87-765D-4FDF-8B27-75E5B537F48E, OS:8.1, name:iPhone 6 } { platform:iOS Simulator, id:FF5588C0-14B5-4303-A2AC-9ACF63B1852C, OS:8.1, name:Resizable iPad } { platform:iOS Simulator, id:E402C9C9-97BA-4909-96B3-3D3C7F6CCC3B, OS:8.1, name:Resizable iPhone }

Build step 'Execute shell' marked build as failure

Finished: FAILURE

risposta

1

Risulta Jenkins stava usando un utente che non dispone di autorizzazioni sufficienti. L'ho capito quando ho creato un altro lavoro e ho provato a firmare l'archivio. Per impostazione predefinita, Jenkins usa l'utente 'jenkins' per fare cose, ma se si esegue la condivisione dello ssh o dello schermo sul proprio server di build con altri utenti, allora si è fregati. Ho deciso di rimuovere il mio daemon Jenkins e utilizzare invece JenkinsApp.

Problemi correlati