Jira To Azure Devops

Jira To Azure Devops

Reading time1 min
#Migration#DevOps#Cloud#AzureDevOps#JiraMigration#ProjectManagement

Jira to Azure DevOps: Practical Migration for Engineering Teams

Migrating from Atlassian Jira to Azure DevOps is rarely a simple platform swap. Experience shows that mishandled migrations lead to broken links, orphaned workflows, and team confusion—often for months. Here’s a practical approach for technical leads and DevOps engineers aiming to preserve velocity and ensure data integrity when converting project tracking infrastructure.


Core Drivers for Migration

Three scenarios crop up repeatedly:

  • Full-stack Microsoft adoption: Azure DevOps offers native integration with Azure Cloud, Git repos, pipelines, and artifacts—notably smoother than gluing Jira to the same.
  • Cost reduction: For some orgs (>100 users), Azure DevOps’ licensing structure is leaner than bundled Atlassian Cloud offerings.
  • Unified toolchain pressure: IT prefers a consolidated CI/CD and project management flow under one SSO umbrella.

Switching for novelty’s sake is a mistake; business case should be explicit.


Migration Constraints: Issues You Can't Ignore

  • Data granularity: Jira’s issue links, sprint history, attachments, and comments. Each field needs clear mapping or acceptance of loss.
  • Workflow translation: Azure Boards supports fewer custom states/transitions versus the labyrinthine Jira flows some PMOs love. No perfect one-to-one mapping exists.
  • Cutover downtime: Even a "zero downtime" plan translates to, at best, an hour where updates are frozen or risk non-sync.
  • End-user retraining: Expect resistance and friction, particularly for QA and PMs reliant on Jira plugins not found in Azure DevOps.

Stepwise Technical Migration Workflow

Step 1: Inventory and Map Jira Assets

Export a full schema:

# Atlassian CLI
acli --action getProjectList
acli --action getIssueList --project "FOO" --outputFormat csv > issues.csv

Document:

  • Each project’s workflows—status, transitions, rules.
  • Custom fields, labels, resolutions.
  • List of all active plugins (e.g. ScriptRunner, Zephyr).

Tip: Archive obsolete Jira projects first; migrated dead configs waste time.


Step 2: Choose an Import Method

No universal tool fits all. Common options:

  • Manual CSV export/import:
    Jira → CSV → Azure DevOps import UI
    Suitable for simple projects. Loses watchership, history granularity, and some attachments.
  • MigrationTools (e.g. nkdAgility/azure-devops-migration-tools):
    Handles more field mapping, but requires .NET Core >=3.1 and fine-tuned JSON mapping files.
  • OpsHub Integration Manager:
    Commercial tool—handles high-volume projects, supports incremental sync, but hefty learning curve and cost.
  • Custom Python scripts via REST API:
    For edge cases (e.g., Jira sub-tasks to Azure parent/child, or re-parenting bugs).

Known issue: CSV import sometimes mangles date fields; always spot-check date parsing post-import.


Step 3: Azure DevOps Pre-Configuration

  • Provision projects and boards.
  • Reproduce mapped workflows. For example:
Jira StatusAzure Boards State
To DoNew
In ProgressActive
BlockedCustom (Add)
Code ReviewReview
DoneClosed
  • Script creation of custom fields:
# Azure DevOps CLI
az boards work-item-type field create \
  --organization "https://dev.azure.com/YOURORG" \
  --project "MyProject" \
  --work-item-type "User Story" \
  --name "Customer Impact" \
  --field-type "string"
  • Permissions: Set up project-scoped security groups (avoid granting Project Collection Administrator unless truly required).

Step 4: Incremental Dry Runs

  • Select a low-value legacy project; attempt full migration.
  • Validate:
    • Issue count parity (Jira = 476 / Azure DevOps = 476)
    • Attachments visible (esp. on epics, not just tasks)
    • Comments, timestamps
    • Parent-child, duplicate, and relates-to links

Quick SQL for cross-verification if using on-prem Jira:

SELECT COUNT(*) FROM jiraissue WHERE project='FOO';

Compare to Azure Boards query results.


Step 5: User Training & Change Management

  • Build concise, side-by-side cheat sheets:

    Jira (Cloud 9.4)Azure DevOps (2022 Q1)
    Create Issue (c)New Work Item (n)
    Transition via Drag & DropState Dropdown Only
    Bulk Edit (Excel Export)Bulk Edit via Query + Multi-edit
  • Record short demos showing workflow, filters, notifications.

  • Roll out in waves (pilot group first, e.g., QA leads).


Step 6: Final Cutover

  • Freeze Jira changes. For cloud: set "browse-only" permissions.
  • Migrate delta issues updated in last X days (known lag source).
  • Notify teams of expected downtime (~60 min typical for <1000 issues).
  • Execute:
    • Automated batch migration scripts
    • Spot-check high-profile issues in both systems

Rollback Plan: Have Jira backup snapshot (<12h old), and a tested revert process (can be manual CSV restore if all else fails).


Example: SaaS Project Migration – Practical Results

Migrated a 300-issue SaaS repo (Jira v8.19.1 to Azure DevOps 2022 Q4). Used MigrationTools with the following pitfalls:

  • Attachment errors:
    • .png files failed on API upload due to size limits.
    • Workaround: batch-resize attachments before migration.
  • State mapping:
    • "Ready for Deploy" state ignored; required manual mapping in a post-import script.

Downtime: 67 minutes. One critical bug found post-migration—a time zone offset meant comments showed out of order for one week (fixed with a batch API patch).


Migration Checklist

StepDetailDone (✓)
Audit Jira workflows.xml/.csv exports complete
Select + test migration toolFull dry run
Prepare Azure BoardsCustom fields mapped
Migrate incrementallyValidate attachments/links
User comms + documentationCheat sheets, demos
Final freeze + delta migrationDowntime scheduled
Post-migration reviewWeekly feedback

Final notes:

  • Attachments >10MB: Expect failures—pre-filter or automate upload scripts.
  • Automation rules: Jira Automation and Azure DevOps Rules differ; reimplement automations after migration.
  • Audit permissions post-migration: Default Azure DevOps groups can expose more than IT expects.

Alternatives exist—some teams elect to run Jira/Azure DevOps in parallel (painful, but possible) for a limited time. But a hard cut is usually less error-prone in the long run.

For in-depth scripts or assistance with edge-case Jira plug-in data (e.g., Zephyr test cases), get in touch—have reusable Python snippets and .NET configs on hand from past work.


Migration is never perfect, but with careful planning and attention to detail, most failures become minor annoyances rather than career-defining headaches.