2014-11-13 2 views
10

Ich habe einen Xcode Bot für ein Projekt installiert, das auf github gehostet wird. Ich habe die Schritte befolgt und den Bot eingerichtet, um meinen vorhandenen SSH-Schlüssel zu verwenden. Die Überprüfung ist erfolgreich und das Projekt wird ausgecheckt und erstellt.Xcode Server 4.0 git push von Build Triggerskript

Ich fügte dann ein Shell-Skript in der Pre-Trigger-Aktion, die die Version in der PLIST inkrementiert, markiert es, und verpflichtet sich, zurück zu Github ändern.

Allerdings, wenn ich versuche, eine git push aus dem Shell-Skript zu tun, bekomme ich diese:

- Pushing zu [email protected]: Spex-app/Spex-ios.git Permission denied (publickey).

fatal: Konnte nicht aus dem Remote-Repository lesen.


Warum würde der Server mein Projekt erfolgreich auschecken, aber nicht in der Lage sein, Änderungen zu pushen. Ich bemerke, dass der Benutzer _xcsbuildd ist. Ich habe versucht, die .ssh-Schlüssel in das /var/_xcsbuildd/.ssh zu kopieren und das funktioniert auch nicht.

+0

Könnten Sie bitte das Skript teilen, das Sie für die Inkrement-Build-Nummer verwenden und auf Git schieben? ! –

+1

'#/bin/s # rev Zahl für verpflichtet als kleinere Version (. ZB 1.0.0 ) buildnumber = $ (git rev-list HEAD | wc -l | tr -d '‚) Echo "Build-Nummer: $ Build-Nummer" /usr/libexec/PlistBuddy -c "Set: CFBundleVersion $ Build-Nummer" "MyProject/MyProject.plist“ git tag -a "$ buildnumber" -m "$ buildnumber" git push --tags' – dmclean

+0

Das obige Script-Tags nur die kleinere Version mit dem rev begeht aus dem Repo. – dmclean

Antwort

6

in vielen der anderen Antworten Taking ich überall im Web gefunden (und zu dieser Frage), habe ich die Schritte, um diese Arbeit in Xcode 6. Erste zu machen, tun das Zeug über das, was angegeben dmclean (mit ein paar Änderungen) auf dem Build-Server:

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) 

Nun, müssen Sie diesen neuen öffentlichen Schlüssel in Ihrem git Konto eingerichtet werden soll. Befolgen Sie diese Schritte: (Schritt 4) https://help.github.com/articles/generating-ssh-keys/

Ich nehme an, Sie haben ein Build-Skript für Ihr Projekt. Unser Projekt hat eine Share Extension und eine Watch Extension. Ich wollte, dass die Build-Nummern über alle erhöht werden (und über alle hinweg gleich sein). Unsere Build-Nummern haben das Format A.B.C.D (Major.Minor.Patch.build). Dieses "Run Script" befindet sich in den "Build Phases" des Hauptprojektes. Hier ist unser Skript:

#!/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 

Wenn es nicht funktioniert, werfen Sie einen Blick auf die Ausgabe in der Build Log (unter der Integration).

Some of the problems I encountered: 

Da _xcsbuildd nicht wirklich ein $ HOME habe ich die git configs zu tun hatte, sonst war ich Fehler bekommen, wo git nicht wusste, wer ich war (Identitätsfehler). Wenn ich ein Schlüsselwort in den RSA-Schlüssel einfügte, gab es mir öffentliche Schlüsselfehler, wenn ich versuchte zu drücken (nahm mich ein wenig, um herauszufinden, das Schlüsselwort herauszunehmen, damit es funktioniert).

Ich hoffe, das hilft jemandem.

+0

Ich hatte auch Probleme, und wenn Sie manuell in das Verzeichnis im Build Server gehen, alle Befehle ausprobieren und das Verhalten von push.default in der Konfigurationsdatei konfigurieren, global die Konfigurationsdatei mit "git config --global push.default simple" setzen "In der Befehlszeile des Servers oder Sie könnten im Skript ohne die Option --global – Maria

+0

tun, musste ich auch meinen Repo mit dem gleichen Xcode Server Bot-Benutzer klonen und ssh Schlüssel verwenden und einen neuen Bot erstellen, so dass er diese verwenden würde bestimmte Anmeldeinformationen. – Maria