2015-12-04 2 views
4

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

Вот вывод, как 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) в этом случае?

+0

Я согласен с вами, что вам нужно позвонить "принести Git LFS". Для части «Аутентификация» вы можете создать «токен доступа» для своей учетной записи Team Services.Проверьте эту ссылку для получения дополнительной информации: https://msdn.microsoft.com/en-us/Library/vs/alm/Code/git/command-prompt#GetsetuptousethecommandprompttoolsCreateapersonalaccesstokenforyourVisualStudioTeamServicesaccount –

+0

Но в этом случае мне нужно определить отдельную учетную запись службы, которая может использоваться для доступа к коду и хранения его учетных данных в агенте сборки. Как правило, агент сборки имеет способ проверить исходный код без требования учетной записи службы. Есть ли способ использовать один и тот же подход из сценария cmd или ps? –

ответ

5

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

enter image description here

0

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

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

4

Update

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


Я попытался задачу 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:[email protected]$($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.' 
} 

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

+0

Существует [открытая проблема] (https://github.com/github/git-lfs/issues/906) с git-lfs, которая не поддерживает учетные данные, переданные в удаленном URL-адресе. Хранение токена в файле, как вы делали, является единственным способом, который поддерживается в настоящее время. –

+0

Этот скрипт работает как шарм. Спасибо. – Filimindji

3

Update

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


Я должен сказать, что я просто найти, что:

В вашем определении сборки, выберите вкладку Repository и проверьте Checkout файлы вариант из LFS

Это не может быть Полегче.

+0

Да, в то же время эта функция реализована из коробки в VSTS. Поэтому принятие этого ответа в качестве решений. –

Смежные вопросы