Helping teams work together effectively is a key factor in 21st-century workplace success. And matching the software they use to the needs of different groups is especially important when they are sharing data. So if you’re a Jira user and you want to share some data with a user working in another Jira, a Jira to Jira integration is what becomes necessary for a smooth collaboration.
This software shouldn’t just help individual teams work flawlessly on their own, it should also help them connect and integrate. That’s why I’m going to show how you can get your teams to work in harmony, as we tackle a Jira to Jira integration here.
You’ll see why connecting Jira instances together is useful, and then look at the technology available for synchronizing them effectively.
After that you’ll be taken through a step-by-step guide, explaining how to set up a connection between two Jira nodes. I’ll show you how you can customize the connection and synchronization.
And lastly, I’ll cover some use cases to show you what a Jira to Jira integration can do to help improve your workflows, keep your teams connected and your data intact.
Here’s what we’ll cover in this blog post:
- Why you Need a Jira to Jira Integration
- How to Choose the Right Technology for a Jira to Jira Integration
- How to Set up a Jira to Jira Sync (the Step-by-Step Process)
- Common Use Cases
Why you Need a Jira to Jira Integration
There are many reasons why you might choose to integrate two Jira instances.
Teams performing different roles very often have overlap in the information they track. For example, customer feedback is useful to the customer support team, who will be the ones directly handling it.
It is also useful to the engineering team, however. Engineers will want to know about bugs or issues with their user interface. They will also want to know what features customers want to see.
On the other hand, marketing teams will want to have a view of the people who are using their product, and what they like and dislike about it.
These teams will want to share information, but they don’t necessarily want to share all of it. Engineers aren’t going to be interested in a customer’s contact information but will want to know about the issue that is being discussed.
To solve these problems, you need to synchronize the information that is useful to both teams. It is possible to share data by email, but obviously that is slow, laborious, and prone to error. So if you manage to do it automatically, you can save everyone time and money, and keep the data intact along the way.
When teams collect information themselves, they can run into an issue known as siloing. Teams can collect data effectively, but they keep it on internal systems. That wouldn’t help the wider organization, especially when going outside the borders.
Providing information to other groups is obviously important, but it is rarely a priority for people on a day to day basis. Having software automate the process of information synchronization can effectively solve this problem.
How to Choose the Right Technology for a Jira to Jira Integration
There are several things to consider when setting up your integration. You need to think about any potential problems and make sure your solution can handle them. The tool I’ve chosen, Exalate, was designed to meet three specific software integration requirements.
First of all, you want your teams to be able to make changes independently while working at the peace of their familiar environment. There will likely be a lot of consultation when setting up the sync, but after that, they need to be able to make changes without consulting each other.
Privacy is also important. Teams must be able to control what is sent to Exalate, and ensure that confidential data is not sent without permission. If exchanged, it must be done securely.
Your integration needs are likely to change over time. You might want to change what data is synchronized or change the format, or the synchronization criteria. Exalate offers a flexible system for controlling what is shared, and when the sharing happens.
Its advanced scripting engine lets you define precisely how you want to integrate data. This flexibility allows you to adapt it to any use case required.
Connections can be altered easily at any time as you can also switch them on and off with a single button. Controlling and adapting the integration as your projects evolve is as straightforward as possible.
You need software that works as close to 100% of the time as possible. It also needs to handle problems gracefully. That means that if one of your systems has some downtime, the integration software is able to handle the outage, and resume operations when the systems are back up again.
It should be able to get the systems back in sync as soon as possible, without you having to spend time resetting it or tweaking the settings.
Ideally, once you have set the system up, you should be able to forget about it. Synchronization should happen without you needing to do anything else.
Exalate is also convenient and easy to work with. It has a free trial, and you can test it without having to enter payment information. Also, it doesn’t take long to install and set up. I’ll run you through the process of doing that next.
How to Set up a Jira to Jira Integration (the Step-by-Step Process)
There are several deployment models of Jira, and you need to know which you have before you start. There are Jira Cloud and Jira Server, along with Jira Data Center, which is essentially a scaled-up version of Jira Server for Enterprise organizations. To read more about the deployment models, check out this article.
Jira Cloud is a subscription-based service hosted by Jira on its own servers. Jira Server and Data Center are hosted on users’ own machines.
The installation process depends on the version. I’m focussing on Jira Cloud here, and there’s a further guide to it in the Exalate documentation. If you’re using Jira Server or Data Center, please look at this guide instead.
Let’s get down to setting up the Jira to Jira integration:
Step 1: Install Exalate on Jira
You’ll need to do this step for each of your Jira setups. Firstly, log in to one of your Jira Cloud instances. Find Exalate in the Atlassian Marketplace. To find it, click the cog-shaped settings button in the top-right of the screen and then click “apps” in the menu that appears.
In the marketplace search field, type “Exalate”. Press the “enter” key and wait. You’ll see several versions of Exalate appear, corresponding to the platforms Exalate supports.
Select “Exalate Jira Issue Sync & more”. Click “Try it free” on the next page. Next, on the “My Atlassian” screen, enter your email address, check the terms and conditions and tick the box, agreeing to them. Then click the “Generate license” button.
When your license is generated, another screen will appear. This shows your instance URL. If this is correct, click the green “Apply License” button.
You’ll be redirected back to Jira, where you’ll see a pop-up telling you that your license has been applied. Click the “Get started” button. Congratulations! Your installation is complete.
Next, you need to repeat the same process on your other instance. If your other instance is Jira Cloud, use the steps above, otherwise check the links for details on the Jira Server or Data Center installation process.
Step 2: Connect your Jira Instances
Now that Exalate is installed on both Jira instances, you need to create a connection between them. The way to do that is to set up the connection in one instance. At the end of that process, an invitation code is generated, which you copy and paste into the other side.
During the connection setup, there are several screens that let you configure exactly how Exalate behaves. In some cases, I’ll pick the defaults, but look in more detail at those areas in steps 3 and 4. Exalate will pick sensible default settings, exchanging data between identical, or equivalent fields.
So in the later steps, I’ll look at how the connection can be adjusted after it has been created. First, let’s set it up.
On one of your Jira instances, click “Apps” in the top menu, and then select “Manage your apps”. If Exalate is installed, you’ll see it listed as a heading in the left-side menu. Click “Connections”.
If you’ve created any connections before, you’ll see them listed here. If not, you’ll see a message saying that none have been created yet. Either way, click the green “Initiate connection” button.
A pop-up will appear taking you through various steps. The first step is to choose what type of destination instance you want to connect to. The options are public, private, or local. To work out which is the right choice, read this guide.
If you select “local”, some of the following steps will be omitted, as you’re synchronizing projects on the same instance, and don’t need to copy and paste invitations from system to system.
I’m selecting public for now. When you’ve made your choice, select the appropriate option, then click “Next”.
On the next screen, enter the URL of the other instance. After entering it, further fields will appear. Then you can give names to your local instance and destination instance. The form will use these to create a name for the connection, which you can modify if you like.
There’s also an optional description field. The more information you enter here, the more easily you’ll be able to identify and work with your connection later on. This is especially important when you have multiple connections and different people working with them. Adding enough detail here can save you work later on. When you’re ready, click “Next”.
If Exalate is detected on both connections, you’ll be offered the chance to use “visual mode”. If you haven’t installed it on both sides, or Exalate can’t get access rights to the other installation, you won’t see this screen, so head straight to ‘Continuing without visual mode’.
“Visual mode” allows you to configure things quickly and easily using a simple interface. If you pick yes on this screen, continue reading the ‘Continue with visual mode’ section. If not, skip to ‘Continuing without visual mode’. Whichever you pick, click “Next” to continue.
Continuing with Visual Mode
Firstly, Exalate will try to establish a connection between your nodes. That might take a few seconds. When it’s ready, click the green “Configure sync” button to proceed.
On the next screen, you have several options to control how you integrate your Jira projects. The connection names are displayed, and under each of them is a drop-down menu where you can pick which project is used for synchronization. The filter issues screen takes you to a further screen, where you can configure what is sent over.
In the middle, the “sync method” drop-down lets us pick whether synchronization is done manually, or automatically, or whether it is disabled entirely. We can make this choice for both synchronization directions, so if you just want to copy issues one way, you can do so. You could also have synchronization occur manually in one direction and automatically in the other, it’s up to you.
Let’s look in more detail at the screen that appears when you click the “Filter issues” button.
There are various filters you can set to choose which issues are synchronized. If you want to sync all of them, just leave these fields blank. You can choose to filter issues of a specific type, or you can select a status, priority, or which labels to use.
If you click the “More” button, a few more fields will appear allowing you to specify the assignee or reporter. You can also add a specific description, or summary, which will select matching items.
These filters can be combined as needed. Click the “Save” button when you’ve made your selections.
Back on the main scope screen, click “Next”, to move on to the next step. On the rules screen, you specify which fields are mapped on to each other. Since the integration uses two Jira instances, fields are mapped one-to-one with identically named fields. If you’re using Jira with another platform, such as a Jira Zendesk integration or a Jira Azure DevOps integration, similar fields may have different names.
You can drag the fields up and down to re-order them. Some can also be expanded to reveal further options. The “priority” field, for example, lets you choose how priorities map to each other.
The “Expand all”, and “Collapse all” buttons at the top left let you show or hide all the extra fields at once, which is useful if you want to check everything quickly.
If you want to create a new mapping, click the “Add mapping” button. Here you can select further fields to be mapped together. Your two instance names are on the left and right sides, and you can choose the fields to be mapped from the drop-down boxes under their titles.
The sync direction field in the middle lets you choose whether the synchronization goes in both directions, or in a single direction.
There are further drop-downs letting you choose what happens if no matching value is found for the field. In this case, Exalate can set a default value, which you select with another drop-down box. Alternatively, it can report an error, or do nothing. This behavior is set on each side of the connection, so it doesn’t have to be identical.
If you click the plus button, you can map specific values for the field to one another. This is especially useful if you are using different platforms. But even with two Jira instances, you may have teams that use different terminology, so this feature can be useful there. There’s a small delete icon next to each entry you can click if you want to remove it.
When you’ve finished on this screen, click the “Save” button if you want to keep your changes, or the “Cancel” button if not.
If you click the small arrow at the side of the “Add mapping” button, you’ll see an “Add script” option. If you click that, a new screen will open. Here you can add lines of code that control your mappings in more detail. The lines of code there already show how you can set specific fields to specific values, or map them onto other values.
Script rules can be complicated, but they are very powerful if you learn how to use them. To learn more, click the “Check examples” text in Exalate to read some script rules examples.
When you’ve finished, click “Save” to keep your changes, or “Cancel” to discard them.
If you want to edit any of the fields that are there, hover over it and click the “Edit mapping” icon next to the delete icon. The “Edit mapping” screen works the same way as the “Add mapping” screen.
You might not want to map all the fields that are mapped by default, so delete any you don’t want by clicking the “Delete mapping” icon, on the right of each one.
When you have everything set up to your liking, click “Publish”, to finalize your choices.
Continue with Advanced Scripting Mode
If you don’t use visual mode, you can still control things through scripting. The methods offered on the wizard here are the same as I’ll cover in later sections, so you can mostly just accept the defaults when installing Exalate.
On the sync rules template screen, you can choose whether to set your project up with basic default settings or to configure things in more detail. Leave the “Single project” selected for now, and click the “Next” button.
Next, you have to choose a project which will be used for synchronization. Select one from the drop-down list and click the “Initiate” button.
Lastly, an invitation code is generated, which you need to copy and paste into the other Jira instance. Click the “Copy invitation code” button. The code will be copied to the clipboard. Paste this somewhere safe, such as a text file, and save it for later. Then click the green “Done” button.
Next, log in to your other Jira instance. Look for the Exalate connections screen in the same way as before. This time, click the “Accept invitation” button. Paste the invitation code into the field provided, then click “Next”.
You’ll see the names of the connections you entered earlier, as well as a description, but you can change these if it suits you to do so. Different teams might want a description that explains how they use the connection.
When accepting the connection invitation, you’ll get similar options to when you created it in the other node if not using the visual mode. You can choose a single or advanced sync rules template, then the local project to be synchronized.
After you’ve made your choices, you’ll see this connection listed among any others you created before.
Now your Jira instances are connected, let’s look at some of the things you can do with the connection.
Step 3: Configure Your Connection to Determine What Information Gets Shared
As mentioned, Exalate will use common defaults when creating your connection. You can edit these at any time.
To start, find your connection in the list, move the mouse over it, and click the “Edit connection” icon that appears. Click on the “Rules” tab in the connection screen. You’ll see two lists of sync rules for the connection. The outgoing sync rules define what happens when items are synced from this to the other instance. The incoming rules do the opposite.
The rules use the ‘groovy’ language, so if you already have some experience, all the better. Anyone familiar with core programming concepts should be able to adapt to it fairly easily.
Each rule shows how fields are mapped on to each other. As this is a Jira to Jira connection, the field names are identical, such as replica.labels = issue.labels.
There are also some helper functions that, for example, can map lists of comments or attachments from one instance to the other, such as issue.comments = commentHelper.mergeComments(issue, replica).
You can adjust these lines to change anything you like. If there are fields you don’t want synced, delete them. If you want to map fields to other fields, adjust them. If you want to give a specific value to a field, change it to do that, for example, you might want to change replica.labels = issue.labels to replica.labels = ‘synced from Jira Server’.
You can use conditional statements and logical operators to give you different behavior in different situations. You can have specific types of items ignored when synchronizing, and you can combine operators to change their behavior for combinations of field values too. Read more about the sync rules here.
If you look under the sync rules, there’s an “Advanced” heading. If you click to expand this, you have the option to show the remote issue link or not.
When you’re finished, click the green “Publish” button to save your changes.
Step 4: Set Up Automated Synchronization Triggers
Triggers define the conditions that cause items to be synchronized over the connection. As with the sync rules, you can use code to control these conditions. The sync rules determine the specifics of what is shared under synchronization, the triggers determine if specific items are synchronized or not.
If you click the “Triggers” tab in the edit connection screen, you can access the automated synchronization triggers. You can also find a summary of all of your active triggers, by clicking “Triggers” in the left-hand menu.
If you use the first method, you’ll see something like the following screen.
We’ve already got a couple of triggers set up, though you won’t see these the first time you access the screen. These triggers synchronize entities that are assigned to Kevin, or where the issue type is “Story”.
These triggers can be edited or deleted by clicking the respective icons in the list, under the “Action” heading. If you click the three dots, you also get the option to “Bulk Exalate” and “Unbulk Exalate”.
To create a new trigger, click the “Create trigger” button at the top right. Triggers are written in a different language depending on the platform. Jira uses its own query language, JQL. Note that this is different from the “Groovy” language used for the synchronization rules. Read more about it in the documentation.
On the “Add trigger” screen, there’s a drop-down box at the top where you can select what kind of entity the trigger applies to. I’ve selected “issue” in this case. In the next box, below the “If”, you enter your query. Here, I’ve chosen to sync issues where the type is marked as “Task”.
I’ve also added a note, describing what the trigger does, and set the trigger to active. If you don’t do that, it won’t work! Finally, click the “Add” button at the bottom.
Back in the trigger list, you can see the entry you just created. Now, items that match the condition will be synced automatically.
Let’s take a quick look at the screen you see if you click “Triggers” in the left-hand menu, and then choose to edit an entry.
As you can see, this screen is very similar to what you saw earlier. There’s an extra field to choose which connection the trigger applies to. If you make changes here, click the “Update” button in the bottom right to keep them, or “Cancel” to discard them.
Step 5: Start Synchronizing Tasks
Now your connection is ready, you can start creating tasks and if they match the criteria, they will be shared between platforms. Exalate checks for new tasks every few minutes, so please wait a little if you don’t see them transferred immediately.
If you don’t see anything after a while, take a look at the rules and make sure they exactly match the items and fields you want to exchange.
Common Use Cases
There are many situations where a Jira to Jira integration could be useful. Let’s run through a few.
Customer Support and Development Teams
Customer support teams get a huge amount of feedback from customers. Much of this concerns the issues that users are having with the product. This could be anything from technical problems, to areas where the user interface isn’t clear, to suggestions for new features.
Developers will want to know if something doesn’t work, or if it could be improved. They will also be open to new suggestions. They won’t necessarily want to know all the details though, and they won’t need to see all the discussions between customers and the support team.
You can set the sync rules to send the information the developers need, and then any solution to the problem can be synced back to the support team. Perhaps you could have a time limit field as well or comments that support can relay back to the customer.
A Marketing Team and Design Team
The marketing team might keep track of features that are popular in competitor products, or that consumers respond to in campaigns. The design team might want to analyze these and see whether they would be a good fit for the team’s product.
If you create a label that corresponds to these features, perhaps called ‘new-features’, you can then create a trigger that says label = new-features. This should be a one-way synchronization as the marketing team won’t need to see the design team’s work.
Safely Connecting to Multiple Suppliers
If you have multiple suppliers, you might want to connect your systems with theirs, while keeping the suppliers’ information separate from each other and providing each end with the maximum autonomy possible. With a cross-company integration solution like Exalate, you can make sure you exchange information safely with each supplier, letting you collate the information without leaking suppliers’ data to each other.
It allows you to comment on or add to the information, and control which of it you share. In this way, you can create “safe islands”, where you can work with the data you need while being confident you aren’t going to breach customer confidentiality.
Managed Services Provider Handling Different Customers
A managed services provider, or MSP, needs to handle issues with its customers. The businesses it deals with may have different contracts, and accordingly different expectations. If an MSP has a small number of large clients, they might well have specific people assigned to handle each one, and Exalate can make sure relevant issues are assigned to the correct person.
It can also share information between systems while keeping some information internal to the MSP. What is shared and what isn’t can be defined for each specific client, depending on the business relationship.
Helping New Staff Members
If you want to help new staff members learn the ropes, Exalate can help with that. You can set Exalate up to copy tickets created by a newcomer to another system, so managers can check what they are doing, and make sure they are responding to issues in the correct way.
To do this, create a synchronization trigger that looks like assignee = team-member-name and then set the sync rules to copy over whatever management wants to check up on. When the new team member is up to speed, you can delete or deactivate the trigger.
As you’ve seen, it’s easier than ever to get your teams working together more effectively. If you set up an effective Jira to Jira integration, you’ll boost your team’s productivity and enable them to benefit from the information captured and processed by different departments.
You also know how to install an integration solution like Exalate and set it up to exchange data between your Jira systems. You can also tune the connection to match your needs and make sure each system gets exactly the information it requires.
If you’ve tried syncing Jira instances, please let us know about your experiences in the comments.