#azure-devops #azure-pipelines #azure-pipelines-build-task #azure-pipelines-tasks
Вопрос:
Я немного застрял здесь, и мне может понадобиться некоторая помощь, чтобы понять этот процесс с помощью azure pipeline.
У меня есть этот конвейер:
steps:
- task: DotNetCoreCLI@2
displayName: 'DotNet - Restore'
inputs:
command: 'restore'
projects: '**/*.csproj'
noCache: true
versioningScheme: 'off'
vstsFeed: 'my-feed'
- task: DotNetCoreCLI@2
displayName: 'DotNet - Pack'
inputs:
command: 'pack'
packagesToPack: '**/*.csproj'
versioningScheme: 'off'
- task: DotNetCoreCLI@2
displayName: 'DotNet - Push'
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: 'my-feed'
Запуск этого конвейера занимает примерно 6 минут, и когда я проверяю детали конвейера, я вижу, что больше всего времени занимает восстановление и упаковка.
Когда я проверяю результаты выполнения этой задачи, я почти уверен, что конвейер строится и восстанавливается на первом этапе, это:
- task: DotNetCoreCLI@2
displayName: 'DotNet - Restore'
inputs:
command: 'restore'
projects: '**/*.csproj'
noCache: true
versioningScheme: 'off'
vstsFeed: 'my-feed'
и когда я проверяю Пачку, я вижу то же самое
- task: DotNetCoreCLI@2
displayName: 'DotNet - Pack'
inputs:
command: 'pack'
packagesToPack: '**/*.csproj'
versioningScheme: 'off'
Я проверил документацию azure, но не смог найти никаких объяснений относительно шагов по пакету и того, поставляется ли он с восстановлением.
Может ли кто-нибудь пролить свет на это?..если я избавлюсь от Восстановления, проект все равно будет восстановлен как часть пакета?
Я хочу сократить время сборки этого трубопровода.
Большое вам спасибо за любую помощь или объяснение.
Комментарии:
1. Вы смотрели документацию по команде dotnet pack ? Это объясняет поведение команды.
2. Документация, которую я нашел, не объясняла его поведение.
Ответ №1:
Документация для dotnet pack
четко объясняет поведение:
Вам не нужно запускать
dotnet restore
, потому что он выполняется неявно всеми командами, требующими восстановления, такими какdotnet new
,dotnet build
,dotnet run
,dotnet test
,dotnet publish
, иdotnet pack
. Чтобы отключить неявное восстановление, используйте эту--no-restore
опцию.
Акцент мой.
Комментарии:
1. Э-э, это удивительно, я этого не видел. так что я могу просто избавиться от задачи восстановления и оставить только пакет
2. Имеет смысл сохранить его, когда у вас есть несколько команд. Поэтому, если у вас есть сборка dotnet, затем протестируйте, а затем упакуйте, было бы лучше добавить восстановление dotnet перед ant, а затем запустить другие с
--no-restore
флагом.3. Я попытался удалить задачу восстановления, но конвейер вышел из строя, так как при выводе не удалось восстановить проект. Что странно, потому что это должно быть частью пакета команд. если я хочу пометить
no-restore
в конвейере пакетов, нужно ли добавлять его в качестве аргумента?4. @KrzysztofMadej Я последовал вашему совету и сохранил восстановление и добавил флаг
--no-restore
в задачу пакета, но я не вижу никаких улучшений. Может быть, вы поможете мне понять это немного. даже если я добавлю флаг, проект будет скомпилирован дважды, по одному для каждой задачи, и это пустая трата времени. как я могу просто упаковать вещи из предыдущего задания? потому что даже еслиpack
команда поставляется с восстановлением и сборкой, если я избавлюсь от задачи восстановления, мой конвейер завершится неудачей.5. Причина, по которой он не работает
pack
безrestore
, вероятно, в том, что вы используете пользовательский канал:vstsFeed: 'my-feed'
. Выpack
все еще восстанавливаетесь, потомуarguments
что свойство не поддерживаетpack
команду: docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/. … Вы должны использовать типcustom
вместоpack
, если хотите передать аргументы.