Недавно обновил свое приложение до .NET 8.0.
Ошибка перехода ниже в конвейере Azure.
##[error]Error: The process '/opt/hostedtoolcache/dotnet/dotnet' failed with exit code 2
Info: Azure Pipelines hosted agents have been updated and now contain .Net 5.x SDK/Runtime along with the older .Net Core version which is currently lts. Unless you have locked down an SDK version for your project(s), 5.x SDK might be picked up which might have breaking behavior as compared to previous versions.
##[error]Dotnet command failed with non-zero exit code on the following projects : [ '' ]
Я уже добавил задачу в YAML для .NET SDK 8.0.302 и среды выполнения .NET Core 8.0.6, которые прошли успешно и после этого столкнулись с этой ошибкой. Что не так в трубопроводе?
ЯМЛ:
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core runtime'
inputs:
packageType: "runtime"
version: "8.0.6"
- task: UseDotNet@2
displayName: "Using DotNet@2"
inputs:
packageType: "sdk"
version: "8.0.302"
- task: DotNetCoreCLI@2
displayName: "Install dotnet format"
inputs:
command: "custom"
custom: "tool"
arguments: "update -g dotnet-format"
- task: DotNetCoreCLI@2
displayName: "Lint dotnet"
inputs:
command: "custom"
custom: "format"
arguments: "--verify-no-changes --verbosity diagnostic"
workingDirectory: backend
Подробное сообщение об ошибке показано ниже: Ошибка конвейера Azure
@ZiyangLiu-MSFT Спасибо за ваш ответ. Обновлен вопрос со всеми запрошенными деталями.
Привет @Stack Overflow, я могу воспроизвести вашу проблему, используя ваш файл yaml. Пожалуйста, добавьте параметр projects
ко всем вашим DotNetCoreCLI@2
задачам. Подробности смотрите в моем ответе ниже.
@StackOverflow Код выхода 2 должен быть ожидаемым поведением при использовании команды формата dotnet. Но в Azure Pipeline любой ненулевой код выхода будет считаться ошибкой. Чтобы решить эту проблему, вы можете использовать задачу PowerShell для запуска команды формата dotnet и установить для ignoreLASTEXITCODE
значение true. Для получения более подробной информации вы можете обратиться к моему ответу.
Согласно вашему yaml, во всех ваших задачах DotNetCoreCLI@2
отсутствует параметр projects
, который используется для указания пути к используемым файлам csproj
или sln
.
Тестируя ваш yaml, я могу воспроизвести ошибку:
Пожалуйста, добавьте projects
, как показано ниже:
- task: DotNetCoreCLI@2
displayName: "Install dotnet format"
inputs:
command: 'custom'
projects: '**/*.csproj'
custom: 'tool'
arguments: 'update -g dotnet-format'
- task: DotNetCoreCLI@2
displayName: "Lint dotnet"
inputs:
command: 'custom'
projects: '**/*.csproj'
custom: 'format'
arguments: '--verify-no-changes --verbosity diagnostic'
Результат:
Я могу воспроизвести ту же проблему при использовании команды формата dotnet.
Обратитесь к этому документу о формате dotnet: формат dotnet
--verify-без-изменений
Проверяет, что никакие изменения форматирования не будут выполнены. Завершается с ненулевым кодом завершения, если какие-либо файлы были отформатированы.
Это ожидаемое поведение при использовании команды формата dotnet. Когда команда вносит какие-либо изменения в файлы, она возвращает ненулевой код выхода. Но конвейер прочитает код выхода как ошибку и не выполнит задачу.
Чтобы игнорировать этот ожидаемый код завершения, вы можете использовать задачу PowerShell для запуска команды формата dotnet. Затем вы можете установить для ignoreLASTEXITCODE
значение true, чтобы игнорировать ненулевой код выхода.
Например:
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core runtime'
inputs:
packageType: "runtime"
version: "8.0.6"
- task: UseDotNet@2
displayName: "Using DotNet@2"
inputs:
packageType: "sdk"
version: "8.0.302"
- task: DotNetCoreCLI@2
displayName: "Install dotnet format"
inputs:
command: "custom"
custom: "tool"
arguments: "update -g dotnet-format"
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'dotnet format --verify-no-changes --verbosity diagnostic'
ignoreLASTEXITCODE: true
pwsh: true
workingDirectory: backend
Результат:
Это была актуальная проблема. Решение сработало, как и ожидалось. Большое спасибо. Вы сделали мой день.
1. Поделитесь своим файлом yaml, который использовался для создания конвейера. 2. Добавьте переменную
system.debug
и присвойте ей значениеtrue
, затем запустите конвейер, чтобы проверить наличие какого-либо подробного сообщения об ошибке. И поделитесь подробной ошибкой. 3. «Агенты, размещенные в Azure Pipelines, были обновлены и теперь содержат...» — это не сообщение об ошибке, а просто сообщение от агента, размещенного в MS, которое также можно увидеть при успешном запуске.