2014-11-13 35 views
10

Ho installato un bot Xcode per un progetto ospitato su github. Ho seguito i passaggi e il bot di installazione per utilizzare la mia chiave SSH esistente. La verifica ha esito positivo e il progetto effettuerà il checkout e la compilazione.Xcode Server 4.0 git push dallo script di trigger build

Ho quindi aggiunto uno script di shell nell'azione di pre-trigger che incrementa la versione in plist, la tagga e le impegna a tornare a github.

Tuttavia quando provo a fare una spinta git da script di shell ottengo questo:

- Pushing a [email protected]: Spex-app/Spex-ios.git Permesso negato (publickey).

fatale: impossibile leggere dal repository remoto.


Perché il server esegue correttamente il checkout del mio progetto ma non è in grado di inviare modifiche. Ho notato che l'utente è _xcsbuildd. Ho provato a copiare le chiavi .ssh in /var/_xcsbuildd/.ssh e anche questo non funziona.

+0

Potresti, per favore, condividere lo script che usi per incrementare il numero di build e premere per git? ! –

+1

'#!/Bin/s # conteggio giri per impegna la versione di scarsa rilevanza (es. 1.0.0 ) numero build = $ (git-rev lista TESTA | wc -l | tr -d ' ') eco "Numero build: $ buildNumber" /usr/libexec/PlistBuddy -c "Set: CFBundleVersion $ buildNumber" "MyProject/MyProject.plist " tag git -a" $ buildNumber "-m" $ buildNumber " git push --tags' – dmclean

+0

Lo script di cui sopra contrassegna solo la versione secondaria con il commit di rev dalla repository. – dmclean

risposta

6

Prendendo in molte delle altre risposte che ho trovato in tutto il web (e su questa questione), ho i passaggi per fare questo lavoro in Xcode 6. In primo luogo, fare le cose sopra quello che dmclean dichiarato (con un paio di modifiche) sul server di generazione:

sudo -u _xcsbuildd /bin/bash 
ssh-keygen -t rsa -b 4096 -C "[email protected]" (when asked for a keyphrase, just hit return) 
ssh -vT [email protected] (this will show you debugging output - you should not have to enter a keyphrase and it should successfully get to git) 

Ora, è necessario impostare questa nuova chiave pubblica nel tuo account git. Attenersi alla seguente procedura: (Passaggio 4) https://help.github.com/articles/generating-ssh-keys/

Suppongo che tu abbia uno script di compilazione per il tuo progetto. Il nostro progetto ha un'estensione condivisa e un'estensione dell'orologio. Volevo che i numeri di build aumentassero su ciascuno di essi (e fossero identici per ciascuno). I nostri numeri di build sono nel formato A.B.C.D (Major.Minor.Patch.build). Questo "Esegui script" si trova in "Fasi di creazione" del progetto principale. Ecco il nostro script:

#!/bin/sh 
# Auto Increment Version Script 
# set CFBundleVersion to 1.0.0.1 first!!! 
# the perl regex splits out the last part of a build number (ie: 1.1.1.1) and increments it by one 
# if you have a build number that is more than 4 components, add a '\d+\.' into the first part of the regex. If you have less remove one 
buildPlist=${INFOPLIST_FILE} 
newVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$buildPlist" | /usr/bin/perl -pe 's/(\d+\.\d+\.\d+\.)(\d+)/$1.($2+1)/eg'` 
echo $newVersion; 
/usr/libexec/PListBuddy -c "Set :CFBundleVersion $newVersion" "$buildPlist" 
/usr/libexec/PListBuddy -c "Set :CFBundleVersion $newVersion" "$SRCROOT/${PRODUCT_NAME} Extension/Info.plist" 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $newVersion" "$SRCROOT/${PRODUCT_NAME} WatchKit Extension/Info.plist" 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $newVersion" "$SRCROOT/${PRODUCT_NAME} WatchKit App/Info.plist" 
echo "Trying Git Config" 
git config user.email "[email protected]" 
git config user.name "XCode Build Server" 
echo "Trying Git Commit" 
git commit -a -m "Updated Build Numbers" 
echo "Trying Git Push" 
git push 

Se non funziona, date un'occhiata in uscita nella build Log (sotto l'integrazione).

Some of the problems I encountered: 

Dal _xcsbuildd in realtà non hanno un $ HOME ho dovuto fare i file di configurazione git, altrimenti mi è stato sempre gli errori in cui git non sapeva chi ero (errori di identità). Se inserisco un keyphrase nella chiave RSA, allora mi ha dato errori di chiave pubblica durante il tentativo di push (mi ci è voluto un po 'per capire come estrarre la keyphrase per farlo funzionare).

Spero che questo aiuti qualcuno.

+0

Ho anche avuto problemi e se si andare manualmente alla directory nel server di build, puoi provare tutti i comandi, ho anche dovuto configurare il comportamento push.default nel file di configurazione, ho impostato globalmente il file di configurazione usando "git config --global push.default simple" "sulla riga di comando del server o si poteva fare nello script senza l'opzione --global – Maria

+0

Ho anche dovuto clonare il mio repository con lo stesso utente del bot del server Xcode e usare le chiavi ssh e creare un nuovo bot in modo che usasse questi credenziali specifiche. – Maria

Problemi correlati