【问题标题】:Xcode server continuous integration and git lfsXcode 服务器持续集成和 git lfs
【发布时间】:2016-05-06 05:47:31
【问题描述】:

我在 Xcode 中创建了一个机器人,用于在我的项目中进行持续集成。

我添加了一个触发器以在集成之前运行,我正在尝试执行“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; go 1.5.1; git 258acf1) git 版本 2.5.4 (Apple Git-61)

$ git-lfs pull 无法检出文件

无法写入工作目录文件:打开媒体文件时出错。 goroutine 66 [运行]: 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

【问题讨论】:

    标签: xcode git github git-lfs


    【解决方案1】:

    以下是我如何让 git lfs 在机器人中工作。首先,我编辑了我的机器人“集成前”触发器运行脚本,如下所示:

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

    我们导出 PATH b/c git lfs 生活在 user/local/bin 中(这些其他位置可能适用,具体取决于您的安装方式或您使用的服务器类型)。否则,找不到 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 命令。

    另外注意我需要用sudo和git lfs,否则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 
    

    【讨论】:

      【解决方案2】:

      伙计们,我不确定原始解决方案是否存在问题,但如果您有问题,请尝试以下方法 - 它适用于 Xcode 9.2 中的 Xcode Build Server/不需要任何权限/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
      

      【讨论】:

        猜你喜欢
        • 2013-11-04
        • 1970-01-01
        • 2013-11-04
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多