You are on page 1of 6

HOW to: Extract from JIRA Web and

Import to ADO
With Solidify (Warning some Developments knowledge are required for using this tool)

Prerequisite:
 From solidify Website Download Latest version. https://github.com/solidify/jira-
azuredevops-migrator/releases

Ie When I did

 On you JIRA Project you need create a API Token:

Navigate to  https://id.atlassian.com/manage/api-tokens and generate an API token.

This token will be used the same way you would your password -p API_TOKEN

 On you ADO Project you need create a API Token:


o After log on Kyndryl - Home (azure.com)

o On the right close to you ID click this icon then select

. Generate a new with the proper access for


creating work Item

Unzip migration API:


Go to your download folder then unzip the Migrator in a TEMP folder

Ie: C:\Temp

Export JIRA tickets :


Here are the difficulties coming, in the samples folder you will found 3 files:

Which is basic type of project you have in JIRA.

Even my project is AGILE one, after copying this file in the Main folder “migrator” you will face many
customizations to be done.

 So first copy the json file corresponding to your project type on Migration API folder.
 Basically, you will need to change some info inside JSON File
o "source-project": "SourceProject" replace it with your project Name in JIRA (if wrong
it doesn’t create error)
o "target-project": "TargetProject" replace it with your project Name in ADO (if wrong
it doesn’t create error)
o "query": "project=ProjectName ORDER BY Rank ASC" replace it with the proper
query for the issue you want extract from JIRA.
o "workspace": "C:\\Temp\\JiraExport\\" it’s the folder where all issue will be
extracted into JSON file
 You don’t need to change other parameter first.
o For info "user-mapping-file": "users.txt" is a file you may need to create if you want
map user in JIRA with user in ADO. This file need to be place in the extract folder.

After this change in JSON config file, you can try a first extract of JIRA.

Open Command Line prompt “like CMD”

Go to migration folder

Enter command: “jira-export.exe -u USER@kyndryl.com -p JIRA_TOKEN --url


https://kyndryl.atlassian.net/ --config config-Agile.json –force”

!!!! Don’t forget replacing user and jira_token !!!!

Ie: if OK it should start like that

If you are really lucky you will not have any error/warning then you can go directly to the Import
Step. Otherwise take some of my experience tips below

Debug mapping:
 Issue Type Mapping:
In Json AGILE File only this mapping exists for type:
"Epic" -> "Epic"
"Story" -> "Feature"
"Bug" -> "Bug"
"Task" -> "User Story"
"Sub-task" -> "Task"

For my project export I was needed to add/modify many. This is my new Type Map code:
"type-map": {
"type": [
{
"source": "Epic",
"target": "Epic"
},
{
"source": "Story",
"target": "User Story"
},
{
"source": "Bug",
"target": "Bug"
},
{
"source": "Task",
"target": "Task"
},
{
"source": "Sub-task",
"target": "Task"
},
{
"source": "Feature",
"target": "Feature"
},
{
"source": "Incident",
"target": "Issue"
},
{
"source": "Change Request",
"target": "Feature"
},
{
"source": "Improvement",
"target": "Feature"
},

{
"source": "Initiative",
"target": "Initiative"
},

{
"source": "User Story",
"target": "User Story"
}
]
},
After relaunch of export normally you shouldn’t get Error. Only Many Warnings.

Error mean Issue is not extracted from Jira and will can’t be imported to ADO.

A Warning mean issue will be created in ADO but as some mappings aren’t correct and you will
need to manually fix them later in ADO.

It’s for that I also update some Status and other fields. This my new code
"field-map": {
"field": [
{
"source": "summary",
"target": "System.Title",
"mapper": "MapTitle"
},
{
"source": "assignee",
"target": "System.AssignedTo",
"mapper": "MapUser"
},
{
"source": "description",
"target": "System.Description",
"mapper": "MapRendered"
},
{
"source": "priority",
"target": "Microsoft.VSTS.Common.Priority",
"mapping": {
"values": [
{
"source": "Blocker",
"target": "1"
},
{
"source": "Critical",
"target": "1"
},
{
"source": "Highest",
"target": "1"
},
{
"source": "Major",
"target": "2"
},
{
"source": "High",
"target": "2"
},
{
"source": "Medium",
"target": "3"
},
{
"source": "Low",
"target": "3"
},
{
"source": "Lowest",
"target": "4"
},
{
"source": "Minor",
"target": "4"
},
{
"source": "Trivial",
"target": "4"
}
]
}
},
{
"source": "Sprint",
"source-type": "name",
"target": "System.IterationPath",
"mapper": "MapSprint"
},
{
"source": "labels",
"target": "System.Tags",
"mapper": "MapTags"
},
{
"source": "comment",
"target": "System.History",
"mapper": "MapRendered"
},
{
"source": "status",
"target": "System.State",
"for": "Task,Change Request",
"mapping": {
"values": [
{
"source": "To Do",
"target": "To Do"
},
{
"source": "Done",
"target": "Done"
},
{
"source": "In Progress",
"target": "Active"
},
{
"source": "Reviewing",
"target": "Testing"
},
{
"source": "Cancelled",
"target": "Removed"
},
{
"source": "Awaiting Feedback",
"target": "Blocked"
},
{
"source": "Blocked",
"target": "Blocked"
},
]
}
},
{
"source": "status",
"target": "System.State",
"for": "Bug,Product Backlog Item",
"mapping": {
"values": [
{
"source": "To Do",
"target": "New"
},
{
"source": "Testing",
"target": "Testing"
},
{
"source": "Reviewing",
"target": "Testing"
},
{
"source": "Done",
"target": "Done"
},
{
"source": "In Progress",
"target": "Committed"
},
{
"source": "Awaiting Feedback",
"target": "Blocked"
},
{
"source": "Blocked",
"target": "Blocked"
},
]
}
},
{
"source": "status",
"target": "System.State",
"for": "Epic,Feature",
"mapping": {
"values": [
{
"source": "To Do",
"target": "New"
},
{
"source": "Done",
"target": "Done"
},
{
"source": "In Progress",
"target": "Active"
},
{
"source": "Researching",
"target": "Discovery"
}
]
}
},
{
"source": "Story Points",
"source-type": "name",
"target": "Microsoft.VSTS.Scheduling.Effort",
"not-for": "Task,User Story"
},
{
"source": "Story Points",
"source-type": "name",
"target": "Story Points",
"for": "User Story"
},
{
"source": "timeestimate",
"target": "Microsoft.VSTS.Scheduling.RemainingWork",
"mapper": "MapRemainingWork",
"for": "Bug,Task"
},
{
"source": "description",
"target": "Microsoft.VSTS.TCM.ReproSteps",
"for": "Bug"
}
]
}

Import TO ADO:
Open Command Line prompt “like CMD”

Go to migration folder

Enter command:

“wi-import --token ADO_TOKEN --url https://dev.azure.com/Kyndryl-Sandbox --config config-


agile.json –force”

!!!! Don’t forget replacing ADO_token and url (-sandbox or not) !!!!

NB:
I found much informations on Solidify tuto/Github:

- Migrate Jira to Azure DevOps | Move from Jira to Azure DevOps | Tooling by (solidify.se)

-jira-azuredevops-migrator/overview.md at master · solidify/jira-azuredevops-migrator · GitHub

You might also like