Как предотвратить сохранение исключения в рабочих элементах?
Версия 8.9.2 - когда я запускаю миграцию Azure DevOps в Azure DevOps с использованием базового процесса Scrum (модифицированного унаследованным процессом, который добавляет ReflectedWorkItemId в WIT), я наблюдаю исключения сохранения для небольшого процента рабочих элементов во время миграции. После миграции я обнаружил, что созданы пустые рабочие элементы без названия. Пример:
(Идентификатор сеанса: 5c74594c-ad96-4d2c-a056-8aec8e35e9f8)
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Work Item has 10 revisions and revision migration is set to True
===============================================================================================
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Found 10 revisions to migrate on Work item:120
===============================================================================================
[ Task][Complete: 1/10][sid:120 |Rev:1 ][tid:null | Processing Revision [1]
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | ...FAILED to Save
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Custom.ReflectedWorkItemId (ReflectedWorkItemId) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.BacklogPriority (Backlog Priority) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.CMMI.Blocked (Blocked) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Build.IntegrationBuild (Integration Build) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.Priority (Priority) | 2
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.ClosedBy (Closed By) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.ClosedDate (Closed Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.ActivatedBy (Activated By) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.ActivatedDate (Activated Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.StateChangeDate (State Change Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Common.Activity (Activity) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Microsoft.VSTS.Scheduling.RemainingWork (Remaining Work) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.BoardLane (Board Lane) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.BoardColumnDone (Board Column Done) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.BoardColumn (Board Column) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Tags (Tags) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.RelatedLinkCount (Related Link Count) | 0
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.History (History) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Description (Description) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.CreatedBy (Created By) | Lori Y
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.CreatedDate (Created Date) | 1/9/2019 8:40:17 AM
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.WorkItemType (Work Item Type) | Task
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AssignedTo (Assigned To) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Reason (Reason) | New task
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.ChangedBy (Changed By) | Taylor, Simon Z
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Rev (Rev) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Watermark (Watermark) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AuthorizedDate (Authorized Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.State (State) | To Do
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Title (Title) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AuthorizedAs (Authorized As) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AreaId (Area ID) | 23
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Id (ID) | 0
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.ChangedDate (Changed Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.RevisedDate (Revised Date) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AreaPath (Area Path) | Oit migration test
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.NodeName (Node Name) | Oit migration test
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AttachedFileCount (Attached File Count) | 0
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.HyperLinkCount (Hyperlink Count) | 0
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.CommentCount (Comment Count) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.RemoteLinkCount (Remote Link Count) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.Parent (Parent) |
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.TeamProject (Team Project) | Oit migration test
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.ExternalLinkCount (External Link Count) | 0
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.IterationId (Iteration ID) | 23
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.IterationPath (Iteration Path) | Oit migration test
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | System.AggregateException: One or more errors occurred. ---> Microsoft.VisualStudio.Services.WebApi.VssServiceResponseException: Page not found.
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<HandleResponseAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__51.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__47`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__28`1.MoveNext()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at VstsSyncMigrator.Engine.WorkItemMigrationContext.ReplayRevisions(List`1 revisionsToMigrate, WorkItem sourceWorkItem, WorkItem targetWorkItem, Project destProject, WorkItemStoreContext sourceStore, Int32 current, WorkItemStoreContext targetStore) in D:\a\1\s\src\VstsSyncMigrator.Core\Execution\MigrationContext\WorkItemMigrationContext.cs:line 394
---> (Inner Exception #0) Microsoft.VisualStudio.Services.WebApi.VssServiceResponseException: Page not found.
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<HandleResponseAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__51.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__47`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__28`1.MoveNext()<---
[Product Backlog Item][Complete: 1/10][sid:120 |Rev:10 ][tid:null | Average time of 1:644 seconds per work item and 0 hours 0 minutes 16:440 seconds estimated to completion
Я воспроизвел эту ошибку, выполнив следующие действия:
1. Настройте измененный / унаследованный процесс Scrum "Миграция" с добавлением "ReflectedWorkItemId" в соответствующие WIT в двух отдельных организациях Azure DevOps. 2. Настройте исходный и целевой проекты "Миграционный тест 2" с помощью миграции. процесс, настроенный в (1)
3. Создайте и сохраните WIT элемента невыполненного журнала продукта в исходном проекте с заголовком "Тестирование изменения PBI на задачу"
4. Измените тип только что созданного WIT на тип Task. Решите проблему с полем состояния, изменив с "New" на "To Do" и сохраните 5. Настройте конфигурацию configuration.json на основе сгенерированного по умолчанию ("init") json с типичными изменениями для каждого видео (карты пустых полей и т. Д.). Включите процессор итераций и процессор WIT. ИзменитьQueryBit
для процессора WIT, чтобы исключить только WIT Test Suite и Test Plan. ЗадаватьReplayRevisions
к true
. 6. Запустите миграцию (на одном WIT, созданном и измененном в (2) и (3)). Воспроизведена ошибка:
(Идентификатор сеанса: 6984b357-03ec-401d-ba03-7d43c84c4c6e)
Found 'Custom.ReflectedWorkItemId' in this project, proceeding.
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Work Item has 2 revisions and revision migration is set to True
===============================================================================================
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Found 2 revisions to migrate on Work item:150
===============================================================================================
[Product Backlog Item][Complete:1/1][sid:150 |Rev:1 ][tid:null | Processing Revision [1]
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | ...FAILED to Save
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Custom.ReflectedWorkItemId (ReflectedWorkItemId) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.BacklogPriority (Backlog Priority) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.AcceptanceCriteria (Acceptance Criteria) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Scheduling.Effort (Effort) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.BusinessValue (Business Value) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Build.IntegrationBuild (Integration Build) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.ValueArea (Value Area) | Business
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.Priority (Priority) | 2
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.ClosedBy (Closed By) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.ClosedDate (Closed Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.ActivatedBy (Activated By) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.ActivatedDate (Activated Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | Microsoft.VSTS.Common.StateChangeDate (State Change Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.BoardLane (Board Lane) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.BoardColumnDone (Board Column Done) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.BoardColumn (Board Column) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Tags (Tags) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.RelatedLinkCount (Related Link Count) | 0
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.History (History) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Description (Description) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.CreatedBy (Created By) | Taylor, Simon Z
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.CreatedDate (Created Date) | 5/11/2020 2:07:59 PM
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.WorkItemType (Work Item Type) | Product Backlog Item
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AssignedTo (Assigned To) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Reason (Reason) | New backlog item
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.ChangedBy (Changed By) | Taylor, Simon Z
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Rev (Rev) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Watermark (Watermark) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AuthorizedDate (Authorized Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.State (State) | New
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Title (Title) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AuthorizedAs (Authorized As) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AreaId (Area ID) | 40
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Id (ID) | 0
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.ChangedDate (Changed Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.RevisedDate (Revised Date) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AreaPath (Area Path) | Oit migration test 2
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.NodeName (Node Name) | Oit migration test 2
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AttachedFileCount (Attached File Count) | 0
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.HyperLinkCount (Hyperlink Count) | 0
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.CommentCount (Comment Count) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.RemoteLinkCount (Remote Link Count) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.Parent (Parent) |
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.TeamProject (Team Project) | Oit migration test 2
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.ExternalLinkCount (External Link Count) | 0
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.IterationId (Iteration ID) | 40
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.IterationPath (Iteration Path) | Oit migration test 2
[ Task][Complete:1/1][sid:150 |Rev:2 ][tid:null | System.AggregateException: One or more errors occurred. ---> Microsoft.VisualStudio.Services.WebApi.VssServiceResponseException: Page not found.
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<HandleResponseAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__51.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__47`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Перенесли с: https://github.com/nkdAgility/azure-devops-migration-tools/issues/485
1 ответ
После просмотра документации я нашел элемент конфигурации SkipToFinalRevisedWorkItemType для процессора VstsSyncMigrator.Engine.Configuration.Processing.WorkItemMigrationConfig. Документы немного загадочны, но я попытался установить для этого элемента конфигурации значение true и обнаружил, что он устраняет исключения сохранения, что привело к успешной миграции и отсутствию рабочих элементов с пустыми заголовками.
Я просмотрел все проблемы и не нашел упоминания о SkipToFinalRevisedWorkItemType, за исключением одной закрытой проблемы, которая включала листинг configuration.json.
Если предполагаемая функциональность SkipToFinalRevisedWorkItemType предназначена для устранения этого исключения сохранения, я бы предложил обновление документации, чтобы указать, что измененные типы рабочих элементов не будут сохраняться при воспроизведении ревизий, если для SkipToFinalRevisedWorkItemType не установлено значение true. В идеале было бы добавлено обновление кода, которое привело бы к более изящной / информативной обработке исключений, если бы не функциональность, которая могла бы успешно перемещаться по изменениям типа рабочего элемента при воспроизведении ревизий.
Если ни один из этих вариантов в настоящее время невозможен, то этот вопрос можно закрыть и использовать в качестве номинальной документации.