Проверьте файлы 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 для доступа к удаленному хранилищу.