Размещенные агенты Azure Pipelines были обновлены и теперь содержат пакет SDK/среды выполнения .Net 5.x вместе со старой версией .Net Core

Недавно обновил свое приложение до .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

1. Поделитесь своим файлом yaml, который использовался для создания конвейера. 2. Добавьте переменную system.debug и присвойте ей значение true, затем запустите конвейер, чтобы проверить наличие какого-либо подробного сообщения об ошибке. И поделитесь подробной ошибкой. 3. «Агенты, размещенные в Azure Pipelines, были обновлены и теперь содержат...» — это не сообщение об ошибке, а просто сообщение от агента, размещенного в MS, которое также можно увидеть при успешном запуске.

Ziyang Liu-MSFT 15.07.2024 14:24

@ZiyangLiu-MSFT Спасибо за ваш ответ. Обновлен вопрос со всеми запрошенными деталями.

Stack Overflow 15.07.2024 14:44

Привет @Stack Overflow, я могу воспроизвести вашу проблему, используя ваш файл yaml. Пожалуйста, добавьте параметр projects ко всем вашим DotNetCoreCLI@2 задачам. Подробности смотрите в моем ответе ниже.

Ziyang Liu-MSFT 15.07.2024 16:28

@StackOverflow Код выхода 2 должен быть ожидаемым поведением при использовании команды формата dotnet. Но в Azure Pipeline любой ненулевой код выхода будет считаться ошибкой. Чтобы решить эту проблему, вы можете использовать задачу PowerShell для запуска команды формата dotnet и установить для ignoreLASTEXITCODE значение true. Для получения более подробной информации вы можете обратиться к моему ответу.

Kevin Lu-MSFT 16.07.2024 09:02
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
4
141
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно вашему 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

Результат:

Это была актуальная проблема. Решение сработало, как и ожидалось. Большое спасибо. Вы сделали мой день.

Stack Overflow 16.07.2024 12:35

Другие вопросы по теме