4

プロジェクトの継続的インテグレーションのために、Xcode でボットを作成しました。

Xcode がビルドを実行するために使用する一時ディレクトリに大きなファイルをプルするように、「git lfs pull」を実行しようとしている統合の前に実行するトリガーを追加しました。

統合を成功させるために「git lfs pull」を機能させる方法は何ですか?

現在、大きなファイルを正常にダウンロードできません。私のスクリプトは次のようになります。

#!/bin/bash

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

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

ただし、大きなファイルはダウンロードされず、トリガー スクリプトのログを確認すると、次の出力が表示されます。

Git LFS: (0/1 ファイル) 0 B / 139.13 MB

Git LFS: (0/1 ファイル) 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.

4

2 に答える 2

6

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 lives を 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 コマンドは発行されません。

また、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 
于 2016-06-01T21:37:22.450 に答える