Пул агентов Azure DevOps: как мне запросить определенную возможность Net Framework SDK?

Мы запускаем автономные агенты для наших конвейеров dev.azure.com. Для некоторых проектов требуются определенные версии NetFramework или NetCore, но мы не хотим устанавливать версии 20-летней давности на все машины с агентами. (Существует множество версий SDK).

Я вижу, что возможности и требования агента обеспечивают функциональность, позволяющую гарантировать запуск сборки только на соответствующем агенте.

Но как мне указать потребность в конкретной версии NetFramework SDK, например. 4.8.1? Я не могу найти список хорошо известных имен возможностей, о которых может сообщить агент.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не знаю, обладают ли некоторые из ваших агентов такими же возможностями, как у одного из моих агентов в самостоятельно размещенном пуле Default ниже. Если нет, вы можете добавить определяемую пользователем возможность к demand заданию агента для запуска на ожидаемых агентах.

Возьмем, к примеру, мой конвейер YAML: любому заданию агента удалось подобрать ожидаемых агентов.

jobs:
- job: ReferenceSystemCapabilities
  pool: 
    name: Default
    demands:
    - Agent.OS -equals Windows_NT
    - DotNetFramework_4.8.0
    - DotNetFramework_4.8.0_x64
  steps:
  - pwsh: |
      Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
      Get-ItemProperty -Name Version,Release -ErrorAction SilentlyContinue |
      Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} |
      Select-Object PSChildName, Version, Release

- job: ReferenceUserDefinedCapabilities
  pool: 
    name: Default
    demands:
    - DotNetFrameworkVersion -equals 4.8.0
  steps:
  - pwsh: |
      Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
      Get-ItemProperty -Name Version,Release -ErrorAction SilentlyContinue |
      Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} |
      Select-Object PSChildName, Version, Release

Спасибо. Синтаксис запроса DotNetFramework_4.8.0 — это половина того, что мне нужно. Правильно ли я понимаю, что лучший способ узнать, какие возможности системы можно назвать, — это посмотреть на существующих агентов и посмотреть, что они декларируют?

Chris F Carroll 20.08.2024 13:55

Но, к сожалению, у меня есть еще одно препятствие. Возможно, мне нужен другой вопрос: машина с агентом, на которой установлен NetFramework SDK 4.8.1, сообщает только о возможности 4.8.0 и не отличается от машины только с платформой 4.8.0. Но моя машина с установленным net4.8.0 не может собрать проект с <TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>

Chris F Carroll 20.08.2024 13:59

Я вижу, что пользовательскими возможностями на самом деле очень легко управлять, так что да, это сработает.

Chris F Carroll 20.08.2024 14:32

Привет @ChrisFCarroll! Спасибо, что нашли время поделиться своими мыслями. На самом деле, если на наших машинах с агентами установлено новое программное обеспечение, нам обычно необходимо перезапустить службу агента (для Windows) или запустить сценарий env.sh (для Linux), чтобы отсканировать и обновить новые возможности. Мы могли бы сначала проверить обновления в среде машины агента, а затем проверить, синхронизированы ли эти новые инструменты с вкладкой возможностей агента, что, я думаю, должно быть более удобным для пользователя способом мониторинга и обслуживания наших агентов.

Alvin Zhao - MSFT 20.08.2024 14:48

И действительно. определяемые пользователем возможности удобны для выбора ожидаемых агентов, когда отсутствуют известные имена возможностей.

Alvin Zhao - MSFT 20.08.2024 14:48

Надеюсь, информация поможет. Считаете ли вы, что вопрос в этом посте решен? Цените ваш обмен.

Alvin Zhao - MSFT 20.08.2024 14:49

Я надеюсь на то, что существует список известных системных возможностей, включающий один для Net SDK 4.8.1 :-) Если такого нет, то да, я вскоре приму этот ответ.

Chris F Carroll 20.08.2024 14:56

Да, я согласен. Кстати, есть ли у вас возможность проверить, есть ли какие-либо обновления в вашей компьютерной среде? Я не так хорошо знаком с установкой DotNetFramework, как с Azure DevOps, но, насколько я понимаю, NetFx 4.8.1 следует обновить в локальной среде компьютера перед сканированием и синхронизацией с Azure DevOps. Я не уверен, но надеюсь, что удаление 4.8.0 не потребуется, поскольку это может повлечь за собой дополнительные работы. >_<!

Alvin Zhao - MSFT 20.08.2024 15:02

мы не хотим устанавливать версии 20-летней давности на все машины с агентами

У меня была похожая проблема на одной из моих предыдущих должностей — там были проекты как .NET Framework, так и .NET Core.

Мы решили не использовать требования: все агенты сборки, работающие в определенном пуле агентов, могли запускать любую сборку в этом пуле. Это упростило обслуживание (меньше типов агентов сборки) и предотвратило использование недостаточно используемых агентов сборки в ожидании нескольких сборок, которые будут использовать очень специфическую (и старую) версию .NET Framework или .NET Core.

Что касается .NET Framework, мы установили Visual Studio Build Tools 2022, включая следующие пакеты таргетинга .NET Framework:

  • 4.6.2
  • 4.7
  • 4.7.1
  • 4.7.2
  • 4,8
  • 4.8.1

Что касается .NET Core, мы рекомендуем разработчикам использовать задачу UseDotNet@2 — пример:

- task: UseDotNet@2
  inputs:
    version: '3.1.x'

Это решает проблему установки нескольких SDK. Кроме того, использование подстановочных знаков гарантирует, что в конвейерах будет использоваться последняя версия SDK, как только она станет доступна.

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