Некоторые конвейеры сборки ADO отображают все рабочие элементы в связанных элементах, а другие — только соответствующие элементы. Ищем идеи

Я пытаюсь обновить связанные рабочие элементы со статусами сборки в ADO. Я создал скрипт, который получает связанные элементы из RestApi, используя build.id, и публикует необходимые обновления. Скрипт работает нормально. Моя проблема в том, что я обнаружил, что в некоторых сборках есть 1-2 связанных элемента, но в других сборках перечислены все изменения и рабочие элементы, что в данном случае является огромной проблемой.

Рабочий процесс в репо выглядит следующим образом. Разработчики создают новые ветки из ветки разработки, фиксируют изменения и возвращают PR в разработку, прикрепляя к PR правильный билет. Конвейеры запускаются при слиянии и после всех этапов выполняют PR в main.

  1. Может ли кто-нибудь объяснить, почему в некоторых сборках отображаются правильные связанные элементы из PR, а в некоторых все изменения отображаются как связанные элементы? Я не верю, что это сделано намеренно.

  2. Есть ли у кого-нибудь идеи о том, как я могу получить идентификатор PR программно из самой сборки? Если бы я мог получить PR, я бы просто запросил restApi для элементов, связанных с PR, вместо сборки.

  3. Есть ли еще творческие идеи, как справиться с этим?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Обновлять

Основываясь на дальнейших обсуждениях, мы увидели на скриншоте, что сборка была вызвана коммитом PR-слияния. Обратите внимание, что PR может внести в целевую ветку несколько коммитов, что представляет собой более одного изменения в коде целевой ветки PR, а не один коммит слияния. Таким образом, WIT, связанный с этими коммитами, также был связан с этой сборкой.

Не существует предопределенной переменной конвейера для извлечения идентификатора PR коммита слияния. Вы можете разделить идентификатор PR от $(Build.SourceVersionMessage), если PR завершен с типом слияния, сообщение о фиксации слияния которого начинается с Merged PR <prId>

variables:
    prId: ${{ split(split(variables['Build.SourceVersionMessage'], ':')[0], 'Merged PR ')[1] }}

  1. Может ли кто-нибудь объяснить, почему в некоторых сборках отображаются правильные связанные элементы из PR, а в некоторых все изменения отображаются как связанные элементы?

Согласно документу Настроить конвейеры для поддержки отслеживания работы

Какие рабочие элементы включены в автоматическое связывание?

При разработке программного обеспечения вы можете связывать рабочие элементы при создании ветки, фиксации или запроса на извлечение. Или вы можете инициировать ветку, фиксацию или запрос на извлечение из рабочего элемента, автоматически связывая эти объекты, как описано в разделе Управление разработкой Git из рабочего элемента.

При автоматическом связывании рабочих элементов со сборками производятся следующие вычисления:

  • Для первой сборки:
    • Определите все рабочие элементы, связанные с веткой, коммитами и запросами на включение, связанными со сборкой.
  • Для последующих сборок:
    • Определите все рабочие элементы, связанные с текущей создаваемой фиксацией (C1).
    • Определите все рабочие элементы, связанные с фиксацией (C2) последней успешной сборки той же исходной ветки.
    • Определите все рабочие элементы, связанные с фиксациями между C1 и C2 в дереве фиксации.

Если в конвейере включена функция Автоматически связывать рабочие элементы со сборками или выпусками, он будет генерировать дополнительные ссылки на соответствующие рабочие элементы с типом ссылки Integrated in build или Integrated in release stage. Включение этой опции не влияет на связанные рабочие элементы сборки, которые можно увидеть на странице сводки сборки.

  1. Есть ли у кого-нибудь идеи о том, как я могу получить идентификатор PR программно из самой сборки?

Если сборка вашего конвейера была инициирована PR ($(Build.Reason) было PullRequest), вы можете получить идентификатор PR, ссылающийся на предопределенную переменную со значением $(System.PullRequest.PullRequestId).

Автоматическое связывание рабочих элементов не включено для конвейера. И у конвейера есть триггер ветвления. Это не пиар-триггер.

StanS 19.07.2024 14:25

Привет! Я обновил ответ, что опция Automatically link work items не влияет на связанные рабочие элементы сборки; он просто генерирует дополнительные ссылки на рабочие элементы. По второму вопросу, могу ли я узнать, почему сборка имела какое-то отношение к PR, когда вместо Build.Reason было IndividualCI или Manual и т. д.?

Alvin Zhao - MSFT 22.07.2024 08:18

Привет, он запускается как индивидуальный ci, а не вручную. Ручной запуск не имеет отношения к этой проблеме. Это работает так: оно запускается при обновлении ветки разработки. Эта ветка обновляется только PR-специалистами, а политика ветки запрещает прямые коммиты в ветку. Итак, как только PR объединен, запускается конвейер. В результате все сборки запускаются успешными PR-слияниями.

StanS 22.07.2024 17:46

Согласно документации Microsoft, триггеры YAML PR поддерживаются только в GitHub и Bitbucket Cloud. Если вы используете Azure Repos Git, вы можете настроить политику ветвей для проверки сборки, чтобы запустить конвейер сборки для проверки. Таким образом, PR-триггер в данном случае неприменим. - В этом случае триггер PR не применяется. Это не конвейер проверки PR.

StanS 22.07.2024 17:51

Итак, у вас была сборка, инициированная IndividualCI, которая представляла собой коммит слияния из PR, и вы ожидали получить идентификатор PR во время этой сборки, верно?

Alvin Zhao - MSFT 23.07.2024 12:21

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

StanS 23.07.2024 15:24

Я добавил скриншот

StanS 23.07.2024 15:33

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

Alvin Zhao - MSFT 24.07.2024 03:48

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