Проверьте файлы git-lfs в сборке VSTF

У меня есть репозиторий, размещенный на VSTS, содержащий файл, сохраненный через git-lfs. Если я просто позволю VSTS build проверить хранилище, он просто загрузит файл метаданных git-lfs, содержащий идентификатор файла.

Вот вывод, как VSTS получает свой источник:

Syncing repository: MyRepo (Git)
Checking out c84ef2f2bbad4fa3dc70dbd4100534390b9c8f18 to d:\work\73\s
Checked out branch refs/heads/develop for repository MyRepo at commit c84ef2f2bbad4fa3dc70dbd4100534390b9c8f18

Что мне нужно сделать, чтобы оформить настоящий файл?

Изменить: я предполагаю, что мне нужно позвонить вручную git lfs fetch после VSTS проверил источник. Но как я могу обработать аутентификацию (которая требуется VSTS) в этом случае?

5 ответов

Решение

Процесс был обновлен еще раз (март 2017 года). На этот раз вам нужно отредактировать часть "Get Sources" вашего определения сборки. Включите опцию "Расширенные настройки" в правом верхнем углу и отметьте опцию "Извлекать файлы из LFS".

Обновить

VSTS теперь поддерживает git LFS из коробки. Это просто вопрос активации опции Repository / Checkout files from LFS в определении сборки. Это намного проще, чем решение ниже.


Я попытался выполнить задачу сборки Pascal Enable Git Remote Access, но не смог заставить ее работать. При вызове git-lfs.exe не происходит сбой, но он не преобразует файлы LFS в реальные файлы.

Вот как я смог заставить это работать. Сначала я должен был включить Allow Scripts to Access OAuth Token вариант в моем определении сборки. Затем я создал сценарий PowerShell, который извлекает зависимости LFS:

# Inspired from here: http://ss64.com/ps/syntax-set-eol.html
function Set-UnixLineEndings([string]$file)
{
    # Replace CR+LF with LF
    $text = [IO.File]::ReadAllText($file) -replace "`r`n", "`n"
    [IO.File]::WriteAllText($file, $text)

    # Replace CR with LF
    $text = [IO.File]::ReadAllText($file) -replace "`r", "`n"
    [IO.File]::WriteAllText($file, $text)
}

if ((Test-Path env:SYSTEM_ACCESSTOKEN) -eq $false)
{
    throw "OAuth token not available. Make sure that you select the option 'Allow Scripts to Access OAuth Token' in build 'Options' pane."
}

# git lfs needs the credentials of the git repository. When running
# under VSTS, these credentials are transfered to the git-lfs.exe
# application using the oauth token provided by VSTS. These
# credentials are stored in a file so that git lfs can find them.

$pwPath = Join-Path $PSScriptRoot pw.txt
$gitPwPath = $pwPath.Replace('\', '/')    # Needs to be in unix format.

$repoUri = New-Object Uri $env:BUILD_REPOSITORY_URI

git config credential.helper "store --file=$gitPwPath"
@"
https://OAuth:$env:SYSTEM_ACCESSTOKEN@$($repoUri.Host)
"@ | Set-Content $pwPath

# Again, needs to be in unix format... sigh...
Set-UnixLineEndings -file $pwPath

& ".\git-lfs.exe" pull
if ($LASTEXITCODE -ne 0)
{
    throw 'Failed to pull LFS files.'
}

Это, очевидно, предполагает, что вы сохранили git-lfs.exe в вашем хранилище git И что этот файл не отслеживается LFS.

Обновить

Я подтверждаю, что процесс изменился, пожалуйста, проигнорируйте следующий ответ.


Я должен сказать, что я просто нахожу это:

В своем определении сборки выберите вкладку Repository и отметьте опцию Checkout files from LFS

Это не может быть проще.

Для TFS Build 2015 Update 4 (самодостаточный вариант этой вещи, в отличие от VSTS, облачной службы), опция "Извлекать файлы из LFS" не существует, и поэтому нам пришлось сделать это:

  • Проверьте Allow Scripts to Access OAuth Token на вкладке Параметры.
  • Зафиксируйте этот пакетный файл в хранилище где-нибудь:

    REM This script is intended to fetch large (LFS) files during the TFS Build process.
    
    REM Solution derived from https://github.com/Microsoft/vsts-agent/issues/1134
    
    git config --unset-all http.extraheader
    git config --add http.extraheader "AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%"
    git lfs fetch
    git lfs checkout
    git config --unset http.extraheader        
    
  • Добавить шаг сборки Batch Scriptи запустите приведенный выше скрипт.

VSTS теперь имеет Allow Scripts to Access OAuth Token вариант. С этой опцией, установленной в определении сборки, OAuth доступен для создания сценариев.

Я создал расширение, содержащее задачи сборки, которые изменяют удаленный URL-адрес, чтобы использовать токен OAuth для доступа к удаленному хранилищу.

Другие вопросы по тегам