Search code examples
azureazure-devopsazure-devops-migration-tools

Do Pipeline Migrations work - been using it and getting the error There is no endpoint named that or duplicates of the same name


Been evaluating the tool and has been great works a treat

just one question does - does the pipeline migrations work using azure devops on prem and doesnt seem to our i dont know how to configure them

reports

[17:51:53 ERR] Unhandled exception! System.InvalidOperationException: There is no endpoint named that or duplicates of the same name at MigrationTools.Endpoints.EndpointFactory.CreateEndpoint(String name) in D:\a\1\s\src\MigrationTools\Endpoints\EndpointFactory.cs:line 49 at MigrationTools.Processors.Processor.Configure(IProcessorOptions options) in D:\a\1\s\src\MigrationTools\Processors\Processor.cs:line 50 at MigrationTools.Processors.AzureDevOpsPipelineProcessor.Configure(IProcessorOptions options) in D:\a\1\s\src\MigrationTools.Clients.AzureDevops.Rest\Processors\AzureDevOpsPipelineProcessor.cs:line 37 at MigrationTools._EngineV1.Containers.ProcessorContainer.Configure() in D:\a\1\s\src\MigrationTools_EngineV1\Containers\ProcessorContainer.cs:line 61 at MigrationTools.MigrationEngine.Run() in D:\a\1\s\src\MigrationTools\MigrationEngine.cs:line 87 at MigrationTools.Host.ExecuteHostedService.b__5_1() in D:\a\1\s\src\MigrationTools.Host\ExecuteHostedService.cs:line 38 [17:51:53 INF] Application is shutting down...

{
"$type": "AzureDevOpsPipelineProcessorOptions",
"Enabled": true,
"MigrateBuildPipelines": true,
"MigrateReleasePipelines": true,
"MigrateTaskGroups": true,
"MigrateVariableGroups": true,
"MigrateServiceConnections": false,
"BuildPipelines": null,
"ReleasePipelines": null,
"RefName": null,
"SourceName": "xxxxxxxxxxx",
"TargetName": "xxxxxxxxxxx"
}

Solution

  • You have to create two "Endpoints" so the Pipeline Processor knows which ones to use. If you check out the source code here, you have nothing going in as the parameter:

    MigrationTools.Endpoints.EndpointFactory.CreateEndpoint(String name) https://github.com/nkdAgility/azure-devops-migration-tools/blob/master/src/MigrationTools/Endpoints/EndpointFactory.cs

    I had the same problem with Team Settings Processor. This link really helped me create the endpoint https://github.com/nkdAgility/azure-devops-migration-tools/pull/860/files

    In the example below for the Team Settings Processor Options, your SourceName would TfsTeamSettingsSource and your TargetName would be TfsTeamSettingsTarget. I had to read the source code to figure out, "Authentication Mode" for AccessToken is 0; It wouldn't take the string "AccessToken" :|.

    See the example below for the Team Settings Processor Options:

    **Endpoints**": {
      "TfsTeamSettingsEndpoints": [
        {
          "Name": "**TeamSettingsSource**",
          "AccessToken": "",
          "Query": {
            "Query": "SELECT [System.Id], [System.Tags] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan') ORDER BY [System.ChangedDate] desc"
          },
          "Organisation": "https://dev.azure.com/like10-demos/",
          "Project": "SourceProject",
          "ReflectedWorkItemIdField": "ReflectedWorkItemId",
          "AuthenticationMode": "Prompt",
          "AllowCrossProjectLinking": false,
          "LanguageMaps": {
            "AreaPath": "Area",
            "IterationPath": "Iteration"
          }
        },
        {
          "Name": "**TeamSettingsTarget**",
          "AccessToken": "",
          "Query": {
            "Query": "SELECT [System.Id], [System.Tags] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan') ORDER BY [System.ChangedDate] desc"
          },
          "Organisation": "https://dev.azure.com/like10-demos/",
          "Project": "TargetProject",
          "ReflectedWorkItemIdField": "ReflectedWorkItemId",
          "AuthenticationMode": "Prompt",
          "AllowCrossProjectLinking": false,
          "LanguageMaps": {
            "AreaPath": "Area",
            "IterationPath": "Iteration"
          }
        }
      ]      
    },