Восстановление и упаковка конвейера Azure

#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 , если хотите передать аргументы.