2014-11-13 2 views
10

github에서 호스팅되는 프로젝트에 대해 Xcode Bot을 설치했습니다. 단계와 설정 봇을 따라 기존 SSH 키를 사용했습니다. 검증이 성공하고 프로젝트가 체크 아웃되고 빌드됩니다.Xcode Server 4.0 빌드 트리거 스크립트에서 git push

그런 다음 plist의 버전을 증가시키고 태그를 붙이고 사전 변경을 github로 다시 커밋하는 사전 트리거 동작에 쉘 스크립트를 추가했습니다. 내가 쉘 스크립트에서 자식 푸시를 할 때

그러나 나는이 얻을 :

- 가 [email protected]에 밀어 : SPEX-응용 프로그램/SPEX-ios.git 권한이 거부 (공개 키).

치명적 : 원격 저장소에서 읽을 수 없습니다.


서버가 내 프로젝트를 성공적으로 체크 아웃했지만 변경 사항을 푸시 할 수없는 이유는 무엇입니까? 사용자가 _xcsbuildd라는 것을 알았습니다. 나는 /var/_xcsbuildd/.ssh에 .ssh 키를 복사하려고 시도했는데 그것도 작동하지 않습니다.

+0

증가 빌드 번호에 사용하는 스크립트를 공유하고 git으로 푸시 할 수 있습니까? ! –

+1

'#이 /에 대한 빈/s의 #의 회전 수가 같은 부 버전을 커밋 (. 예를 들어 1.0.0 ) buildNumber = $ (자식 레브리스트 HEAD | 화장실 -l | TR -d '') 에코 "빌드 번호 : $ buildNumber" /usr/libexec/PlistBuddy -c "Set : CFBundleVersion $ buildNumber" "MyProject/MyProject.plist " 자식 태그 -a"$ buildNumber "-m"$ buildNumber " git push --tags' – dmclean

+0

위의 스크립트는 repo에서 rev 커밋을 사용하여 부 버전을 태그로 지정합니다. – dmclean

답변

6

내가 웹에 걸쳐 발견 다른 답변을 많이 촬영 (이 문제에), 나는 물건을 할, 엑스 코드 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/

프로젝트의 빌드 스크립트가 있다고 가정합니다. Google의 프로젝트에는 공유 확장 프로그램 및보기 확장 프로그램이 있습니다. 나는 빌드 번호가 각각에 걸쳐 증가하도록 (그리고 각각에 걸쳐 동일하게) 싶었습니다. 빌드 번호는 A.B.C.D (Major.Minor.Patch.build) 형식입니다. 이 "Run Script"는 주 프로젝트의 "Build Phases"에 있습니다. 스크립트는 다음과 같습니다.

#!/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 정말 내가 자식 CONFIGS을해야했다 달러 (A $) 홈을 가지고 있지 않기 때문에

, 그렇지 않으면 나는 자식 내가 (신원 오류) 누구인지 모르는 오류를 얻고 있었다. RSA 키에 keyphrase를 넣으면 푸시 할 때 공개 키 오류가 발생합니다 (키프로스트를 꺼내서 작동하도록하는 데 다소 시간이 걸렸습니다).

이 정보가 도움이되기를 바랍니다.

+0

또한 문제가 있으며 수동으로 디렉토리에 빌드 서버에 가서, 당신은 모든 명령을 시도 할 수 있습니다. 또한 구성 파일에 push.default 동작을 구성해야했다, 나는 전역 적으로 설정 파일을 설정 "자식 - 글로벌 push.default "서버의 명령 줄에서 - 또는 --global 옵션을 사용하지 않고 스크립트에서 수행 할 수도 있습니다 – Maria

+0

동일한 Xcode 서버 봇 사용자로 내 repo를 복제하고 ssh 키를 사용하여 새 봇을 만들어야만 사용할 수 있습니다 특정 자격 증명. – Maria