Best-of-breed systems such as Jira and Azure DevOps Server (TFS) bring rich functionalities to the ecosystem. The integration of Jira with Azure DevOps Server (TFS) enhances collaboration between the project and development teams. As both the teams have visibility into each other’s task and complete context of customer expectations, the quality of product is better and the delivery cycle is shorter. There is no manual effort required to keep the teams updated on the latest work status.

OpsHub Integration Manager integrates Jira and Azure DevOps Server (TFS) bi-directionally. On this page, we will discuss the bi-directional integration of:

Jira [Story]

Azure DevOps Server
Azure DevOps Server (TFS) [User Story]

Jira [Defect]

Azure DevOps Server
Azure DevOps Server (TFS) [BUG]

System Prerequisites

Configuring system prerequisites is mandatory for successful system configuration.

Check out the prerequisites for Jira and Azure DevOps Server (TFS) systems before you proceed with the integration.


Integration Configuration

Log in into OpsHub Integration Manager. The default credentials are: User Name: admin, Password: Password.

proxy parameters Before you proceed with the configuration, check whether the system is behind a proxy server. If yes, then set up proxy parameters in OpsHub Integration Manager.

Click Integrate on the top right corner of the screen and then click the Integrate icon .

The integration configuration page opens.

  • Enter a unique name for the integration. For example, this integration is named Jira Azure DevOps Server (TFS) Integration.
  • Click integration adjacent to the System 1 and System 2 fields one by one to configure Jira and Azure DevOps Server (TFS).

Configure System(s)

Once you have fulfilled all the prerequisites and are done with the above-mentioned check, configure Jira and Azure DevOps Server (TFS) by following the steps given on Jira and Azure DevOps Server (TFS) pages respectively.

When you save the respective system configuration pages after configuring the systems the systems will automatically be added to the integration. Proceed to adding projects and entities in the integration.

Select Projects and Entities

Projects and Entities If you receive the following error: PKIX certification path not found and the projects and entities don’t load properly, then import SSL certificate onto OpsHub Integration Manager’s Java KeyStore before you proceed.

In the Add Project(s) to Sync section, select the projects you want to synchronize between Jira and Azure DevOps Server (TFS) by clicking them. For example, here we select OpsHub Integration Manager Demo Project from Jira and TestProject from Azure DevOps Server (TFS).

Once the projects are selected, define the source project and target project.

  • If you select Projects and Entities icon, the data would flow from Jira to Azure DevOps Server (TFS).
  • If you select Projects and Entities icon, the data flow would from Azure DevOps Server (TFS) to Jira.
  • If you want a bi-directional flow of data, select Projects and Entities icon.

Once the direction is selected, the arrows would turn grey. We have selected the bi-directional flow.

OpsHub Integration Manager fetches entities available in both systems and shows them in entities list for both systems. From the Select Entities to Sync section, select the relevant entities for both systems. In this case, we will select Story from Jira and User Story from Azure DevOps Server (TFS).

The next step is to define the fields that need to be integrated for every entity mapped. So, once the entities are selected, click the OpsHub Integration Manager adjacent to Select fields to be Synced to create the mapping between these two entities. You will be navigated to Mapping Configuration screen.

Mapping Fields

Entity: Story and User Story
Following details are automatically populated in the Mapping section: Systems, Projects, and Entities, and Mapping Name. If you wish, change the name for the mapping in the Name field.

Now, either click the Create from Scratch button to define the mapping from scratch or click Auto Map button to automatically map all fields with same name. Even if you select the Auto Map button, OpsHub Integration Manager will allow you to remove or add more fields before saving mapping. We select Create from Scratch.

Mapping Mandatory Fields
Now from the All fields drop-down list, select the Mandatory fields option.

Mandatory fields The integration would fail if the Mandatory fields are not mapped.

But as there are no Mandatory field(s) for Azure DevOps Server (TFS) and Jira does not allow accessing the Mandatory fields from the API, check the Mandatory fields for Jira from Jira UI and map them accordingly to suitable field(s) in Azure DevOps Server (TFS).

Mandatory fields Mandatory fields might vary from one instance to another.

Mapping Look-up Type Fields
Once you have mapped the Mandatory fields, you can now add more fields for mapping. We map the Look-up type fields first. Look-up type fields are multivalued fields. During mapping the fields for integration, the values of Look-up fields must be mapped for the mapped entities. In this case, we choose Priority and Status as the Look-up type fields to be mapped. We map:

  1. Priority to Priority
  2. Status to State

As Status and Priority are Look-up type fields. The Look-up type fields are marked with Priority to Priority icon . Once you have mapped these fields in Jira and Azure DevOps Server (TFS), click Priority to Priority icon to map their values one by one.

Values for Look-up type fields may vary from one instance to another. Kindly map the values that you think are equivalent by clicking them. You have to map the values for all Look-up types fields before you proceed.

For example, map the following values for Priority:

  • Critical to 1
  • High to 2
  • Minor to 3
  • Normal to 4

You can map values for Status-State fields accordingly.

Now, save the value mapping.

Default Mapping is used to write default value to target field in case if there is no value coming from mapped source fields. Click Default Mapping to define the default mapping. The Default Mapping pop-up opens.

For user mapping, default value should be configured in form of user name or email as user name as expected by target end-point.

For user mapping, default value will not be written to target even if matching user not found in target. This will be done only if nothing coming from mapped source field.

Mapping Rich Text Fields

A rich-text field provides editing tools to customize the text entered in the field. We can map rich text fields with similar values from both the systems, for example, in this case we map Summary from Jira to Title in Azure DevOps Server (TFS).

Then click the Create Mapping button to save the mapping.

Once you save the mapping successfully, you will be further re-directed to the Integration page.

If you do not wish to add more entities, save the integration and activate it.

Entity: Defect and Bug
From the Select Entities to Sync, select the relevant entities for both systems. In this case, we will select Bug from Jira and Bug from Azure DevOps Server (TFS). Create a Mapping for these entities as well.

Click the adjacentmappingto Select fields to be Synced to create the mapping between these two entities. You will be navigated to Mapping Configuration screen.

You can refer to the previous mapping and follow the same steps further.

It is time to save this mapping now. Once the mapping is created, click the Create Mapping button to create & save this mapping as well.

The image on right shows a reference mapping for these entities. Once you save the mapping successfully, you will be further re-directed to the Integration page.

Comments and Attachments Mapping

At this stage, you can also map entities such as comments and attachments.

Refer to the videos on this page to learn in detail about Comments and Attachments mapping.

Configure Filter(s) (Optional)

Criteria Filter helps in integration of subset of entities based on some conditions. For example, user can specify that only bugs with high priority are to be synchronized or tickets that are closed should be synchronized. Once the entity meets the criteria, it is always in synchronization, even after the criteria changes.

Criteria Configuration can be applied in both the directions, forward direction would mean Jira would be the source system and backward direction would mean Azure DevOps Server (TFS) would be the source system.

Mapping Configuration It is not a Mandatory step for integration and if no filter needs to be applied on the entities to be synchronized, this step can be skipped.


If you want to specify conditions for synchronizing an entity between Jira and Azure DevOps Server (TFS) to be integrated, use the Criteria Configuration feature.

For example, we only want to synchronize fields with Priority 1 to Story from Jira to Azure DevOps Server (TFS) then we set the configuration as shown here.

  • Click the configuration-criteria icon against the mapping on which you are going to apply the criteria.
  • The Criteria Configuration pop-up opens. In the pop-up, select Yes from Configure Criteria list.
  • Enter the criteria query. Note, the query is different for different systems. You can refer to more details about Criteria Configuration in Jira and Azure DevOps Server (TFS) from their respective configuration pages.
  • Select In Database from the Select criteria storage type drop-down list.

Save and Activate Integration

To save the integration in active mode, slide the Activate Integration button to the right.

As the final step, click Save button to save the integration.

The integration will be created. You will also get a pop-up at the bottom of the screen confirming the integration has been successfully configured and the integration will be listed in the integrations list.

Test the Integration

At this stage, test the integration by trying to synchronize data between the specified Jira and Azure DevOps Server (TFS) projects.

Azure DevOps Server You should not be using the integration user credentials to create entities in the systems as in this case the integration will not work.

Create/Update event in the source system and check whether the event synchronizes to the target system. Wait for one minute for the data to synchronize. If you face any issue, please refer this page for possible reasons and their fix .

Jira and Azure DevOps Server (TFS)

Additional Configurations

Mapping User Fields
Choose the mapping in which you want to make changes. We choose Jira [Story] – TFS2017 [User Story]mapping. Edit this map to add the changes.

We will now add user-types of fields such as Author, Updated By, etc. in the mapping. The user fields vary from one system to another.

We will map the user fields: Assignee in Jira to Assigned To in Azure DevOps Server (TFS). You are free to choose other fields.

Jira and Azure DevOps Server (TFS) User fields are mapped by email id. If e-mail ids of the users are same in both the systems, it will be mapped automatically, but if the email ids are not same, you will have to update the one-to-one XSL for user fields mapping.

Once the additional configurations are completed successfully,update the mapping, and activate the integration, and save it again.