2014-11-13 7 views
10

Я установил Xcode Bot для проекта, размещенного на github. Я выполнил шаги и установил бота для использования моего существующего ключа SSH. Проверка завершается успешно, и проект будет проверяться и строиться.Xcode Server 4.0 git push from build trigger script

Затем я добавил скрипт оболочки в действие перед триггером, которое увеличивает версию в plist, теги ее и фиксирует это изменение в github.

Однако, когда я пытаюсь сделать Git толчок из сценария оболочки я получаю это:

- Нажатие на [email protected]: СПЕКС-приложение/СПЕКС-ios.git Разрешение отказано (ОткрытыйКлюч).

фатальный: не удалось прочитать из удаленного хранилища.


Зачем серверу удастся проверить мой проект, но не в состоянии внести изменения. Я заметил, что пользователь _xcsbuildd. Я попытался скопировать ключи .ssh в этот /var/_xcsbuildd/.ssh, и это тоже не сработает.

+0

Не могли бы вы поделиться сценарием, который вы используете для увеличения номера сборки и нажатия на git? ! –

+1

'#/бен/с # оборотов счетчик для совершает в качестве дополнительной версии (., Например, 1.0.0 ) BuildNumber = $ (мерзавец преподобного список ГОЛОВА | туалет -l | тр -d '«) эха "Номер сборки: $ buildNumber" /usr/libexec/PlistBuddy -c "Set: CFBundleVersion $ buildNumber" "MyProject/MyProject.plist " git tag -a" $ buildNumber "-m" $ buildNumber " git push --tags' – dmclean

+0

Вышеупомянутый скрипт просто отмечает второстепенную версию с фиксацией rev из репо. – dmclean

ответ

6

Принимая во многих других ответов, которые я нашел по полотну (и по этому вопросу), у меня есть шаги, чтобы сделать эту работу в Xcode 6. Во-первых, делать вещи над чем dmclean заявил (с парой изменений) на сервере сборки:

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) 

Теперь вам нужно установить этот новый открытый ключ в вашем аккаунте мерзавца. Выполните следующие шаги: (Шаг 4) https://help.github.com/articles/generating-ssh-keys/

Я предполагаю, что у вас есть сценарий сборки для вашего проекта. Наш проект имеет расширение Share и Watch Extension. Я хотел, чтобы числа сборки увеличивались по каждому (и были одинаковыми для каждого). Наши номера сборки находятся в формате A.B.C.D (Major.Minor.Patch.build). Этот «сценарий запуска» находится в «Строках построения» основного проекта. Вот наш сценарий:

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

Если он не работает, посмотрите на выходе в бревенчатых (при интеграции).

Some of the problems I encountered: 

Поскольку _xcsbuildd не действительно есть $ HOME Я должен был сделать мерзавец конфиги, в противном случае я получаю ошибки, когда мерзавец не знал, кто я (ошибки идентичности). Если я поставил ключевую фразу в RSA-ключ, тогда он дал мне ошибки открытого ключа при попытке нажать (взял меня немного, чтобы понять, чтобы вывести ключевую фразу, чтобы заставить ее работать).

Надеюсь, это поможет кому-то.

+0

У меня также были проблемы, и если вы вручную перейдите в каталог на сервере сборки, вы можете попробовать все команды. Мне также пришлось настроить поведение push.default в файле конфигурации, я глобально установил конфигурационный файл, используя «git config - global push.default simple «в командной строке сервера, или вы могли бы сделать это в скрипте без опции -global. – Maria

+0

Мне также пришлось клонировать мое репо с тем же пользователем бота сервера Xcode и использовать ssh-ключи и создавать новый бот, чтобы он использовал эти конкретные учетные данные. – Maria