Git Sparse checkout во время конвейеров Azure, занимающих ~15 минут
У нас есть одно репо с исходным кодом, размер которого при загрузке составляет около 2,8 ГБ. У нас есть 4 агента с собственным хостингом и более 100 конвейеров сборки. При этом невозможно загрузить весь исходный код, закодированный для каждой сборки / агента.
Подход, который я выбрал, заключается в том, чтобы отключить проверку для этого конвейера, а затем запустить сценарий командной строки для выполнения разреженной проверки Git. Однако получение исходного кода объемом ~100 МБ занимает около 15 минут.
Мы используем автономные агенты Linux.
steps:
- checkout: none
- task: CmdLine@2
displayName: "Project Specific Checkout"
inputs:
script: |
cd $(Build.SourcesDirectory)
git init
git config --global user.email ""
git config --global user.name ""
git config --global core.sparsecheckout true
echo STARS/Source/A/ >> .git/info/sparse-checkout
echo STARS/Source/B/ >> .git/info/sparse-checkout
echo STARS/Source/C/ >> .git/info/sparse-checkout
git remote rm origin
git remote add origin https://service:$(Service.Account.Personal.Access.Token)@dev.azure.com/Organization/Project/_git/STARS
git reset --hard
git pull origin $(Build.SourceBranch)
Есть ли что-то, что я делаю здесь неправильно, из-за чего требуется так много времени, чтобы вытащить эти данные.
1 ответ
1. Поскольку вы используете собственный агент, вы можете перейти на машину с агентом, чтобы вручную запустить команды git и посмотреть, получите ли вы такую же производительность.
2. установить переменную
system.debug
к
true
, чтобы проверить, какая команда требует больше времени.
3.Вместо проверки Git Sparse вы можете указать
path
в
checkout
шаг:
steps:
- checkout: self | none | repository name # self represents the repo where the initial Pipelines YAML file was found
clean: boolean # if true, run `execute git clean -ffdx && git reset --hard HEAD` before fetching
fetchDepth: number # the depth of commits to ask Git to fetch; defaults to no limit
lfs: boolean # whether to download Git-LFS files; defaults to false
submodules: true | recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules; defaults to not checking out submodules
path: string # path to check out source code, relative to the agent's build directory (e.g. \_work\1); defaults to a directory called `s`
persistCredentials: boolean # if 'true', leave the OAuth token in the Git config after the initial fetch; defaults to false
4. Поскольку вы запускаете конвейер на собственном агенте, по умолчанию ни один из подкаталогов не очищается между двумя последовательными запусками. В результате вы можете выполнять инкрементные сборки и развертывания при условии, что задачи реализованы так, чтобы использовать это. Таким образом, вы можете установить для параметра Clean значение false.