To be able to develop advanced synchronization scripts you require a development background and a good understanding of Groovy and the entities of the underlying issue tracker and Exalate itself. 

In case of need, we can provide training and professional services to deliver the solution you're looking for.  Please contact sales@exalate.com for more information.

This page describes how to synchronize a simple project. It means that all information within the project (issue key, change history, issue links, sub-tasks, typical issue custom fields, etc) will be synchronized.


The scripts below work also for sprint synchronization on Jira Server.


  • 2 Jira Server instances: sending and receiving
  • A project with data on the sending side (RED Jira): Project Tasks (PT)
  • An empty project on the receiving side (BLUE Jira): Project Tasks (SD) 
  • A connection setup between the two JIRA servers

Script Rule configuration


We provide scripts for demonstration purposes. Every script needs to be adapted for your specific use case.

Now you need to customize synchronization processors as follows

Scripts for sending side

(JIRA Server)

Scripts for receiving side

(JIRA Server)
Data FilterData Filter 
Create ProcessorCreate Processor 
Change ProcessorChange Processor 

For Exalate 4.3

With the External scripts library feature we've updated scripts to rely on the external AgileSync.groovy file.

You need to upload AgileSync.groovy file to the $JIRA_HOME/scripts directory on the server, where you have your Jira instance installed.


The Create and Change processors have a SETTING section at the top that needs to be configured

def reuseIssue = false
def projectMapping = [
def issueTypeMapping = [
        "Remote Issue Type 1": "Local Issue Type 1"
] as Map<String, String>

def priorityMapping = [
        "Remote Priority 1": "Local Priority 1"
] as Map<String, String>

def boardMapping = [
        "Source Board 1" : "Destination Board 1"

// enter the corresponding statuses of the source and destination issue
final def workflowMapping = [
        "Source Status A" : "Dest Status A",
        "Source Status B" : "Dest Status B",
        "Source Status C" : "Dest Status C",
] as Map<String, String>

def defaultUser = nodeHelper.getUserByUsername("example.user")

def keepOnlySyncedIssuesInSprint = false
def deleteActiveSprints = false


  1. Create a Trigger on the sending side:
    In the add-on section of your Jira, access the triggers and create a new trigger. Include all issues in your project to be synchronized using the previously created relation. The relation towards the receiving instance ( BLUE Jira). Activate the trigger.

  2. Use Bulk Exalate to synchronize multiple issues at a time.

Exalate is running through all the issues and sending out all the information from the BLUE instance to the RED instance.
After a while, all issues will be showing up in the same configuration as on the RED instance.