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

У меня есть репозиторий, размещенный на VSTS, содержащий файл, хранящийся через git-lfs. Если я просто позволю VSTS построить проверку репозитория, он просто загрузит файл метаданных 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)?


person Pascal Berger    schedule 04.12.2015    source источник
comment
Я согласен с вами, что вам нужно вызвать git lfs fetch. Что касается аутентификации, вы можете создать личный токен доступа для своей учетной записи Visual Studio Team Services. Подробные сведения см. по этой ссылке: msdn .microsoft.com/en-us/Library/vs/alm/Code/git/   -  person Vicky - MSFT    schedule 09.12.2015
comment
Но в этом случае мне нужно определить отдельную учетную запись службы, которую можно использовать для доступа к коду и сохранения ее учетных данных в агенте сборки. Как правило, у агента сборки есть способ проверить исходный код без необходимости наличия учетной записи службы. Есть ли способ использовать тот же подход из сценария cmd или ps?   -  person Pascal Berger    schedule 09.12.2015


Ответы (5)


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

введите описание изображения здесь

person BrutalDev    schedule 25.03.2017

Обновить

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


Я попробовал Pascal Включить удаленный доступ Git построить задачу, но я не смог заставить ее работать. Вызов 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.

person mabead    schedule 08.03.2016
comment
Существует открытая проблема с git-lfs, которая не поддерживает учетные данные. передан в удаленном URL. Хранение токена в файле, как вы сделали, — это единственный поддерживаемый в настоящее время способ. - person Pascal Berger; 27.03.2016

Обновить

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


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

В определении сборки выберите вкладку Репозиторий и установите флажок Извлекать файлы из LFS.

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

person Filimindji    schedule 23.10.2016
comment
Да, пока эта функция реализована в VSTS «из коробки». Поэтому принимая этот ответ в качестве решения. - person Pascal Berger; 26.10.2016

Для 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 и запустите приведенный выше скрипт.

person Scott Stafford    schedule 12.04.2018
comment
Спасибо за синтаксис extraheader. +1 - person InteXX; 28.06.2018

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

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

person Pascal Berger    schedule 11.12.2015