10

我为托管在 github 上的项目安装了 Xcode Bot。我按照步骤和设置机器人来使用我现有的 SSH 密钥。验证成功,项目将检出并构建。

然后我在预触发操作中添加了一个 shell 脚本,它增加 plist 中的版本,标记它,并将更改提交回 github。

但是,当我尝试从 shell 脚本执行 git push 时,我得到了这个:

-- 推送到 git@github.com:spex-app/spex-ios.git 权限被拒绝(公钥)。

致命:无法从远程存储库中读取。


为什么服务器会成功签出我的项目但无法推送更改。我注意到用户是_xcsbuildd。我尝试将 .ssh 密钥复制到该 /var/_xcsbuildd/.ssh 中,但这也不起作用。

4

2 回答 2

6

我想到了。您需要为 _xcsbuildd 用户创建新密钥。然后将它们添加到 github。该线程的底部:https ://devforums.apple.com/message/1054122#1054122

sudo -u _xcsbuildd /bin/bash
ssh-keygen -t rsa -C "your_email@example.com"
ssh -T git@github.com
于 2014-11-13T19:45:25.450 回答
6

考虑到我在整个网络上找到的许多其他答案(以及在这个问题上),我已经有了在 Xcode 6 中完成这项工作的步骤。首先,在你的构建中执行 dmclean 所述的内容(有一些更改)服务器:

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

现在,您需要在您的 git 帐户中设置这个新的公钥。请按照以下步骤操作:(第 4 步) https://help.github.com/articles/generating-ssh-keys/

我假设您有一个项目的构建脚本。我们的项目有一个 Share Extension 和一个 Watch Extension。我希望每个版本号都增加(并且每个版本号都相同)。我们的内部版本号采用 ABCD 格式(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 "your_email@example.com"
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 我必须进行 git 配置,否则我会遇到 git 不知道我是谁的错误(身份错误)。如果我在 RSA 密钥中放置了一个关键字,那么它在尝试推送时给了我公钥错误(我花了一点时间才弄清楚要取出关键字以使其工作)。

我希望这可以帮助别人。

于 2015-06-04T20:40:21.600 回答