从 Xcode 服务器上的构建脚本中执行 git 推送 OVER HTTPS
Doing a git push OVER HTTPS from within a build script on Xcode server
首先要说的是我不会用ssh
除此之外,如果有人能提供帮助,我将永远感激不已。
我需要 运行 在我的 bot 上构建一个 post 脚本,该脚本创建一个标签并在构建成功后将其推送到远程。我已经尝试 运行 将其作为在机器人上定义的 "post" 脚本,作为项目构建设置中的 "build stage",以及作为 post-build 脚本在我为 CI 使用的自定义共享方案。脚本如下所示:
if [ -z "$PROJECT_DIR" ]; then
echo "No project dir variable"
else
cd $PROJECT_DIR;
echo "PROJECT_DIR is $PROJECT_DIR";
echo "Directory is $(pwd)";
git config user.email "myself@mycompany.com"
git config user.name "myself"
CURRENTTAG=$(git describe --abbrev=0 --tags);
echo "CURRENTTAG is $CURRENTTAG";
CURRENTTAG_PRE=`echo $CURRENTTAG | awk -F "_" '{print }'`;
echo "CURRENTTAG_PRE is $CURRENTTAG_PRE";
CURRENTTAG_POST=`echo $CURRENTTAG | awk -F "_" '{print }'`;
echo "CURRENTTAG_POST is $CURRENTTAG_POST";
if [ -z "$CURRENTTAG_POST" ]; then
echo "catastrophic failure"
exit 0
else
CURRENTTAG_POST=$(($CURRENTTAG_POST + 1));
SPACE="_";
NEW_TAG=$CURRENTTAG_PRE$SPACE$CURRENTTAG_POST;
echo "NEW_TAG is $NEW_TAG";
git tag -a $NEW_TAG -m "$NEW_TAG";
git push origin "$NEW_TAG"
echo "New tag $(git describe --abbrev=0 --tags) created"
fi
fi
因此,使用 git config
命令的黑客可以阻止 git 询问机器人 "Please tell me who you are"。但是,一旦机器人通过该限制,git 推送就会失败,并显示以下内容:
fatal: could not read Password for 'https://myself@mygitremote.com': Device not configured
任何人都可以提供任何基于 HTTPS 的建议来帮助我解决这个问题吗?
顺便说一下,我使用的是 Xcode 6.4 和服务器 4.1.2。
谢谢。
编辑:我已经看到了很多解决方案,它们都是通过对 _xcsbuildd 的 shell 进行 sudo 开始的。在 Xcode Server 4.1 中肯定没有 _xcsbuildd 的主目录,所以你不能 "git config --global" 任何东西。
我遇到了类似的问题。我试图从 bot 的预触发脚本将更改推送到 git 远程存储库,每次我收到:
fatal: could not read Username for 'http://...': Device not configured
我的最终解决方案是将凭据存储在 _xcsbuildd
用户的钥匙串中:
# login as a _xcsbuildd user
sudo -u _xcsbuildd /bin/bash
# store credentials in the default osx keychain
git credential-osxkeychain store https://github.com
# copy added credentials from `login` keychain to `System` keychain
首先要说的是我不会用ssh
除此之外,如果有人能提供帮助,我将永远感激不已。
我需要 运行 在我的 bot 上构建一个 post 脚本,该脚本创建一个标签并在构建成功后将其推送到远程。我已经尝试 运行 将其作为在机器人上定义的 "post" 脚本,作为项目构建设置中的 "build stage",以及作为 post-build 脚本在我为 CI 使用的自定义共享方案。脚本如下所示:
if [ -z "$PROJECT_DIR" ]; then
echo "No project dir variable"
else
cd $PROJECT_DIR;
echo "PROJECT_DIR is $PROJECT_DIR";
echo "Directory is $(pwd)";
git config user.email "myself@mycompany.com"
git config user.name "myself"
CURRENTTAG=$(git describe --abbrev=0 --tags);
echo "CURRENTTAG is $CURRENTTAG";
CURRENTTAG_PRE=`echo $CURRENTTAG | awk -F "_" '{print }'`;
echo "CURRENTTAG_PRE is $CURRENTTAG_PRE";
CURRENTTAG_POST=`echo $CURRENTTAG | awk -F "_" '{print }'`;
echo "CURRENTTAG_POST is $CURRENTTAG_POST";
if [ -z "$CURRENTTAG_POST" ]; then
echo "catastrophic failure"
exit 0
else
CURRENTTAG_POST=$(($CURRENTTAG_POST + 1));
SPACE="_";
NEW_TAG=$CURRENTTAG_PRE$SPACE$CURRENTTAG_POST;
echo "NEW_TAG is $NEW_TAG";
git tag -a $NEW_TAG -m "$NEW_TAG";
git push origin "$NEW_TAG"
echo "New tag $(git describe --abbrev=0 --tags) created"
fi
fi
因此,使用 git config
命令的黑客可以阻止 git 询问机器人 "Please tell me who you are"。但是,一旦机器人通过该限制,git 推送就会失败,并显示以下内容:
fatal: could not read Password for 'https://myself@mygitremote.com': Device not configured
任何人都可以提供任何基于 HTTPS 的建议来帮助我解决这个问题吗?
顺便说一下,我使用的是 Xcode 6.4 和服务器 4.1.2。
谢谢。
编辑:我已经看到了很多解决方案,它们都是通过对 _xcsbuildd 的 shell 进行 sudo 开始的。在 Xcode Server 4.1 中肯定没有 _xcsbuildd 的主目录,所以你不能 "git config --global" 任何东西。
我遇到了类似的问题。我试图从 bot 的预触发脚本将更改推送到 git 远程存储库,每次我收到:
fatal: could not read Username for 'http://...': Device not configured
我的最终解决方案是将凭据存储在 _xcsbuildd
用户的钥匙串中:
# login as a _xcsbuildd user
sudo -u _xcsbuildd /bin/bash
# store credentials in the default osx keychain
git credential-osxkeychain store https://github.com
# copy added credentials from `login` keychain to `System` keychain