two-way sync

Jira Azure DevOps Integration

Connect Jira and Azure DevOps using a reliable, flexible integration solution. Improve the productivity of your cross-team and cross-company collaborations.

Automate data transfer workflows and get rid of silos with a bidirectional Jira Azure DevOps integration tool. 

sync issue types, labels, priority, status...

sync any custom fields, attachments... 

sync comments, worklogs, history...

Sync type, title, creator...

sync status, description, priority...

sync attachments, custom fields...

sync comments...

Start for free

Seamless Azure DevOps Jira Sync For Smooth Collaboration

Automate your integration process between Jira and Azure DevOps to improve productivity.
Increase transparency by eliminating information silos between internal and external teams.

Automatic triggers to streamline synchronization

Real-time status updates on work items

Reliable one and two-way syncs from either side of the connection

Top-notch reporting for authorized stakeholders

Automatic restarts after downtimes

Unlimited sync capacity for Jira issues, sprints, etc.


Get Anything Synced Between Azure DevOps and Jira

Use one or two-way mappings to configure fields to precision. Decide what gets synced and what doesn’t. Your sync, your rules. 

Check the full list of supported fields for Jira and for Azure DevOps

Its hard to talk about supported fields, because with Exalate you can support a lot. And it is impossible to capture on a single page. We have done cases with very weird things - certainly not limited to the ones listed on the documentation.

discover if we cover your integration requirements
book a demo

Book a demo to see Exalate in action


Get the Most out of Your Jira Azure DevOps Integration

Start all cross-team connections from either Azure DevOps or from Jira, whichever option you prefer. You can install the app with a straightforward installation wizard on both Jira and Azure DevOps.

Improve the speed and accuracy of syncs by using custom automated triggers. Configure your triggers with platform-native query language to establish granular control over every sync.


Use the custom Bulk Exalate feature to make your synchronization workflow more efficient. Connect multiple existing entities with similar trigger configurations in one operation.

Use the Groovy scripting engine to explore endless connection scenarios and syncing possibilities. We have a few sample code snippets in our stash to get you started. Non-technical users can also use Visual Mode to create mappings with little or no code.

Keep Integration Decentralized

Maintain independent control over every sync, especially for cross-company integrations. Keep your confidential information close to your chest, with no need to share admin rights.

Scale Faster

Start working with out-of-the-box connections for basic synchronization scenarios. Continue growing with the help of script-based custom connections.

Secure by Design

Protect your sensitive data from unauthorized users. Let Exalate’s single-tenant architecture help you maintain autonomous control over your instance.

Ensure Data Privacy

Protect your sensitive data from unauthorized access with our single-tenant architecture that works even behind your firewall. Stay ahead of any data breach or suspicious activity using advanced endpoint detection and response (EDR).

Handle Errors Easily

Spot errors as soon as they occur and track them down to the source. Get the first crack at debugging your code before asking a technician.

The fact that Exalate is a very extensible and flexible product is quite an impressive feature for us. We can even build our own integration on top of it, and it actually shows that the developers and the engineers behind the product do really know what they are doing. Plus we have had an excellent customer experience.

Alexander Sinno |

Start for free

Start Simple, Advance With Confidence

Work with simple integration templates or completely customize a sync between Azure DevOps and Jira.

Sync Anything

Set up two-way syncs to link new and existing work items (defects, components, test suites, test plans, test cases, etc).

Share data between fields, including comments, descriptions, attachments, statuses, priorities, urgencies, work logs, custom fields, and much more.

Add custom triggers to exert granular control over how your Jira Azure DevOps sync works.

Keep Synced Attachments Private

Add and share attachments to work items without having it reflect on the Jira issue. Filter the attachments you want to share with the other side of the integration.


   issue.projectKey   = “JSM”

   issue.typeName     = nodeHelper.getIssueType(replica.type?.name, issue.projectKey)?.name ?: “[System] Service request”


replica.addedAttachments.each { a ->

    def comment = commentHelper.addComment(“!${a.filename}!”, [])[0]

    comment.internal = true

    comment.restrictSync = true

    issue.comments += comment



issue.attachments  = attachmentHelper.mergeAttachments(issue, replica)


replica.addedComments.each { it.executor = nodeHelper.getUserByEmail( }

replica.changedComments.each { it.executor = nodeHelper.getUserByEmail(it.updateAuthor?.email) }

issue.comments       = commentHelper.mergeComments(issue, replica, {it.internal = true; it})

Replicate Jira Issue Hierarchy on Azure DevOps

Map all features coming from Azure DevOps to appear under a Jira (Cloud) Epic. Retain the same hierarchy when sending data over to Jira.




   workItem.projectKey  =  “Majids Development”

      def typeMap = [

       “Epic” : “Feature”,

       “Story” : “Task”


    workItem.typeName = nodeHelper.getIssueType(typeMap[replica.type?.name],workItem.projectKey)?.name ?: “Task”

    workItem.summary      = replica.summary


        workItem.parentId = “9785”



. . .

Sync Inline Images Between Systems

Configure your custom sync to enable the syncing of inlin e images between Azure DevOps and Jira On-Premise.

import com.atlassian.jira.component.ComponentAccessor


class WikiToHtml {

    static String transform(String wikiFormat) {

        if (!wikiFormat) {

            return null



. . .


        def fixImage = wikiFormat?.replaceAll(/\!(\S+)\|\S+\!/, ‘<!– inline image filename=#$1# –>’)

        fixImage = fixImage.replaceAll(/\!\^(\S+)\|\S+\!/, ‘<!– inline image filename=#$1# –>’)

        fixImage = fixImage.replaceAll(/\!\^(\S+)\!/, ‘<!– inline image filename=#$1# –>’)

        fixImage = fixImage.replaceAll(/\!(\S+)\!/, ‘<!– inline image filename=#$1# –>’)


. . .




replica.description = WikiToHtml.transform(issue.description)

replica.labels         = issue.labels

replica.comments       = issue.comments.collect {

    comment ->

    comment.body = WikiToHtml.transform (comment.body)



We can now handle around 500 customer incidents per week, thanks to Exalate, which is a very good result regarding the number of products we’re dealing with. It synchronizes 45x faster than our previous solution.

Christof Cuyper |


Get Started In Minutes



Install the Exalate app on both Jira and ServiceNow. Or, have it as a bridge app on ServiceNow.



Use the instance URL to connect the instances you want to integrate. Choose the no-code set-up or the Script mode.



Configure your sync rules to make sure the right data is shared. Automate your sync with triggers.



Now your instances are connected and will automatically exchange information instantly. Happy syncing!

Start Synchronizing Your Tools​

Assistance on Demand

Let the best technical support managers and engineers help you fix errors and technical difficulties. Sit back while we do most of the work for you.


Answers to the most frequently asked questions

You can sync work item type, title, description, priority, state, comments, attachments, custom fields, area path, tags, etc, on Azure DevOps. On Jira, you can sync summaries, descriptions, comments, attachments, assignees, reporters, labels, priority, due, work logs, custom fields (check box, cascading select, group picker), components, organizations, issue links, agile boards, versions, etc. To explore further sync possibilities, use the advanced scripting mode.

Exalate’s no-code Basic Mode is free to install and use for simple synchronization tasks. To get the advanced Script Mode, you need to buy the Premium Plan after a 30-day trial. Contact the sales team to get a more detailed pricing quote.

We offer Standard and Premier Support to our customers depending on their needs and the running service-level agreement. As part of our Premier Support, we’ll assign a dedicated support agent to assist with your problem. You’ll also get up-to-date progress reports about critical production issues.

Exalate has a built-in error recovery mechanism that allows you to fix problems and resume synchronization from the moment it fails. You can use the troubleshooter to examine the error stack trace to determine if the error occurred at the entity, connection, or application levels.

Jira sends data as a Wiki, while Azure DevOps uses HTML. To handle the formatting differences, Exalate uses converters (called Transformers) to change the incoming or outgoing data to the corresponding format on either side of the sync. One application of transformers is the synchronization of inline images between Jira and Azure DevOps. Transformers can convert HTML to Wiki, Markdown to Wiki, or Wiki to HTML.

Yes, Exalate supports single-tenancy, thus isolating your infrastructure and minimizing the risk of information leakage. When you deploy a node on the Exalate Cloud, it runs inside a ‘Kubernetes pod’ configured to prevent information leaks. You can also add a firewall as extra protection.

Yes, you can use Exalate to connect multiple Jira and Azure DevOps instances. This integration solution helps to streamline collaboration between developers, salespersons, marketers, and support agents. Exalate supports other ITSM tools like ServiceNow, Zendesk, Salesforce, and GitHub. Check out our integrations for more information. 

How useful was this content?

Click on a star to rate it!

Average rating 4.8 / 5. Vote count: 22

No votes so far! Be the first to rate this post.