[Feature] Mapping Users between environments
MrHinsh opened this issue · 5 comments
MrHinsh commented
maf-soft commented
Great, here are some thoughts:
- automatically handling all identity fields, mentions, comment authors would be nice
- since ExportUsersForMapping already exists, that mapping format should be supported, ideally also by specifying the filename
- mapping by RegEx, sometimes it is as easy as reversing firstname and lastname
- auto detect common formats and find target users? or extend ExportUsersForMapping so it tries some auto mapping with existing target users and you can verify and edit in the file
Angelos102 commented
Caution, when adding users into the new project, if you migrate history you get lots of notifications to mentioned users, so it should be highlighted as these notifications can NOT be turned off. If you do not add the users on the the project migration or project admins get the notification, so it should be a choice
MrHinsh commented
MrHinsh commented
Im looking at the mapping, and it sucks! Azure DevOps in the ObjectModel API stores only the friendly name...
MrHinsh commented
##How it works
- Run
ExportUsersForMappingConfig
which will export all of the Users in Soruce Mapped or not to target. - Run
WorkItemMigrationConfig
which will run a validator by detail to warn you of missing users. If it finds a mapping it will convert the field...
##Notes
- Applies to all identity fields specified in the list
- It really sucks that we have to match on Display name! Email is included for internal matching
- On 'ExportUsersForMappingConfig
you can set
OnlyListUsersInWorkItems` to filter the mapping based on the scope of the query. This is greater if you have many users. - Both use the 'TfsUserMappingEnricherOptions
setting in
CommonEnrichersConfig` to know what to do.
{
"ChangeSetMappingFile": null,
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/nkdagility/",
"Project": "AzureDevOps-Tools",
"ReflectedWorkItemIDFieldName": "nkdScrum.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "",
"PersonalAccessTokenVariableName": "",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/nkdagility-preview/",
"Project": "migrationTest5",
"ReflectedWorkItemIDFieldName": "nkdScrum.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "",
"PersonalAccessTokenVariableName": "",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"FieldMaps": [],
"GitRepoMapping": null,
"LogLevel": "Debug",
"CommonEnrichersConfig": [
{
"$type": "TfsUserMappingEnricherOptions",
"Enabled": true,
"UserMappingFile": "C:\\temp\\userExport.json",
"IdentityFieldsToCheck": [
"System.AssignedTo",
"System.ChangedBy",
"System.CreatedBy",
"Microsoft.VSTS.Common.ActivatedBy",
"Microsoft.VSTS.Common.ResolvedBy",
"Microsoft.VSTS.Common.ClosedBy"
]
}
],
"Processors": [
{
"$type": "ExportUsersForMappingConfig",
"Enabled": true,
"WIQLQuery": "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan','Shared Steps','Shared Parameter','Feedback Request') ORDER BY [System.ChangedDate] desc",
"OnlyListUsersInWorkItems": true
}
],
"Version": "15.0",
"workaroundForQuerySOAPBugEnabled": false,
"WorkItemTypeDefinition": {
"sourceWorkItemTypeName": "targetWorkItemTypeName"
},
}