Xcode服务器持续集成和git lfs

时间:2016-01-28 17:49:53

标签: xcode git github git-lfs

我在Xcode中创建了一个bot,用于我项目的持续集成。

我添加了一个触发器,在集成之前运行,我试图做一个" git lfs pull"这样它就可以将大文件拉入Xcode用于执行构建的临时目录中。

有什么方法可以获得" git lfs pull"工作,以使整合成功?

目前我无法成功下载大文件。我的脚本如下所示:

#!/bin/bash

changeToRepo() {
    cd ${XCS_SOURCE_DIR}/My-Project-Name
}

changeToRepo
/usr/local/bin/git-lfs pull

但是,没有下载大文件,当我检查触发器脚本的日志时,我看到以下输出。

  

Git LFS :( 1个文件中的0个)0 B / 139.13 MB

     

Git LFS :( 1个文件中的0个)0 B / 139.13 MB
  无法签出文件git-lfs / 1.1.0(GitHub; darwin amd64;转1.5.1;   git 258acf1)git版本2.5.4(Apple Git-61)

     

$ git-lfs pull无法结帐文件

     

无法写入工作目录文件:打开媒体文件时出错。   goroutine 66 [running]:github.com/github/git-lfs/lfs.Stack(0x0,0x0,   0x0)/Users/rick/go/src/github.com/github/git-lfs/lfs/errors.go:557   + 0x80 github.com/github/git-lfs/commands.logPanicToWriter(0x89a1e8,0xc82002e018,0x896028,0xc82000e480)     /Users/rick/go/src/github.com/github/git-lfs/commands/commands.go:184   + 0xf7f github.com/github/git-lfs/commands.logPanic(0x896028,0xc82000e480,0x0,0x0)     /Users/rick/go/src/github.com/github/git-lfs/commands/commands.go:148   + 0x421 github.com/github/git-lfs/commands.handlePanic(0x896028,0xc82000e480,0x0,0x0)     /Users/rick/go/src/github.com/github/git-lfs/commands/commands.go:123   + 0x4e github.com/github/git-lfs/commands.LoggedError(0x896028,0xc82000e480,0x548060,0x17,0x0,0x0,0x0)     /Users/rick/go/src/github.com/github/git-lfs/commands/commands.go:73   + 0x82 github.com/github/git-lfs/commands.checkoutWithChan(0xc82012c4e0)     /Users/rick/go/src/github.com/github/git-lfs/commands/command_checkout.go:202   + 0x860 github.com/github/git-lfs/commands.checkoutFromFetchChan.func1(0xc82012c4e0,,   0xc82018e040)     /Users/rick/go/src/github.com/github/git-lfs/commands/command_checkout.go:78   + 0x21由github.com/github/git-lfs/commands.checkoutFromFetchChan创建     /Users/rick/go/src/github.com/github/git-lfs/commands/command_checkout.go:80   + 0x439

2 个答案:

答案 0 :(得分:5)

这里是我如何让git lfs在机器人中工作。首先,我编辑了我的机器人"在整合之前"触发运行脚本看起来像这样:

enter image description here

#!/bin/bash
export PATH="$PATH:/opt/local/bin:/opt/local/sbin:/usr/local/bin"
(cd ${XCS_SOURCE_DIR}/My-Project_Dir/My-Subfolder-Dir; sudo git lfs pull)

我们将用户/本地/ bin中的PATH b / c git lfs导出(这些其他位置可能适用,具体取决于您安装它的方式或您使用的服务器类型)。否则,找不到git lfs。

目录My-Project_Dir / My-Subfolder-Dir是项目的位置。 Xcode服务器将我的源代码下载到$ {XCS_SOURCE_DIR}这是一个临时文件夹,但与我的大文件有关的.git文件位于My-Project_Dir / My-Subfolder-Dir中。

请注意,cd和git lfs命令位于括号内,这是因为cd命令会生成子进程。如果我们只有一行cd并且在下一行有git lfs,则该目录不会保持更改,因为在子进程退出后,父进程仍然在初始目录中。除非我们在该子进程内部按顺序运行命令,否则不会在子进程中的新目录内发出git lfs命令。

另请注意,我需要在git lfs中使用sudo,否则git lfs没有权限。僵尸程序运行在与我的服务器管理空间不同的用户空间中,用户名为_xcsbuildd。

因此,将_xcsbuildd用户添加到sudoers。在终端中,使用以下命令:

$ sudo visudo

找到行"%admin ALL =(ALL)ALL",按" a"编辑文件,在它下面添加以下行:

_xcsbuildd ALL=(ALL) NOPASSWD: ALL

点击Esc然后输入以下命令编写并退出:

:wq 

检查以确保sudoers是正确的:

$ sudo cat /etc/sudoers | grep _xcsbuildd
_xcsbuildd ALL=(ALL) NOPASSWD: ALL 

答案 1 :(得分:1)

伙计们,我不确定原始解决方案是否存在问题,但是如果您遇到问题,请尝试以下内容 - 它适用于Xcode 9.2中的Xcode Build Server /并且#39 ; t需要任何权限/ sudoing等。基本上它是关于通过自制软件安装git-lfs并在此之后执行git lfs pull

#!/bin/sh -ex
pushd "${XCS_SOURCE_DIR:?}"

rm -rf homebrew
mkdir homebrew
curl -L "https://github.com/Homebrew/brew/tarball/master" | tar xz --strip 1 -C homebrew
export PATH="$PATH:$PWD/homebrew/bin"
brew install git-lfs

cd YourCheckedOutRepository
git lfs pull

popd