Sync Issue - Jira and Zendesk

Tested Request Type Defect: Didn’t work as expected - Performed end-to-end analysis and provided a detailed explanation below to support troubleshooting and ensure clarity of the issue.

Zendesk ticket was created with Request Type: Defect.

Expected Behavior:

  • A Jira issue should be created as Bug
  • No assignee should be set on the Jira side, and assignee sync should be disabled in both directions
  • Status sync between Jira and Zendesk is not required, only Jira Status → mapped to Zendesk custom field “Jira Status”
  • The following fields should sync:
    • Subject
    • Comments (Jira ↔ Zendesk, as Internal Comments only)
    • Priority, Severity, Tags
    • Fix Versions (if present)
  • Comments should continuously sync in both directions (as internal comments), for “Defect” type tickets regardless of status

Issue Observed:
A Zendesk ticket was created with requester and assignee set to Grishma (not part of DevOps/Cloud Services). After selecting Exalate, the sync status briefly showed “Waiting for remote”, then reverted to “Not synchronized”. No Jira issue was created, and no error was displayed.

Jira Outgoing Script:
replica.key = issue.key
replica.type = issue.type
replica.assignee = issue.assignee
replica.reporter = issue.reporter
replica.summary = issue.summary
replica.description = issue.description
replica.labels = issue.labels
replica.comments = issue.comments
replica.resolution = issue.resolution
replica.status = issue.status
replica.parentId = issue.parentId
replica.priority = issue.priority
replica.attachments = issue.attachments
replica.project = issue.project
replica.fixVersions = issue.fixVersions

/*
Uncomment these lines if you want to send the full list of versions and components of the source project.
replica.project.versions =
replica.project.components =
*/

/*
Custom Fields (CF)
How to send any field value from the source side to the destination side.
1/ Add the value to the replica object using the Display Name of the specific field.
2/ Uncomment this next statement out and change accordingly:
replica.customFields.“CF Name” = issue.customFields.“CF Name”
*/

// Exalate API Reference Documentation: Exalate API Reference Documentation

Hi @spulakhandam ,

Thank you for being a part of Exalate Community.

I will work on this use case to reproduce a scenario, and update you back this week with a result / solution.

Kind regards,
Ashar

Sure @ashar.iqbal I have added few more issues that we are facing. All of this has been already logged under POC - Jira Service Management

In regards to the previous issue, A second test was performed with both reporter and assignee set to myself (DevOps team). This time, a Jira issue was created via manual Exalate, but:

  • Severity values in Jira did not match those in Zendesk
  • Fix Versions field (set to “na” in Jira) did not sync back to Zendesk

The Jira issue was manually assigned to Chris , and this update was synced back to Zendesk assigning the ticket to him. This is not expected behavior for Defect type tickets, where assignee sync should be disabled .

Zendesk-Side Error on Ticket Resolution:

While attempting to close the Zendesk ticket, the following error was encountered, despite all required fields being present. I also tried using “Resolve & Retry”, but the error persisted.

This issue appears to be isolated to this specific ticket, as the error has not occurred with others. It may be a one-off glitch, but logging it here for investigation.

Fix Version Not Syncing:

The Fix Version added on the Jira side is not syncing to Zendesk.

Expected Behavior:
Fix Versions should sync to Zendesk regardless of the status on either the Jira or Zendesk side, as long as a value is present.

Issue: Linking Multiple Zendesk Tickets to One Jira Ticket:

I attempted to link multiple Zendesk tickets to a single Jira ticket using the “Connect” option under Exalate on the Zendesk side. I provided the Jira ticket number I wanted to link to, and the connection was established successfully.

However, I noticed that the Jira ticket number did not appear in the “Dev Reference” field on the Zendesk side after the link was created.

Initially, I thought entering a Jira ticket number directly into the “Dev Reference” field would automatically trigger Exalate and sync the ticket, but I understand now that it doesn’t. Manually using the Connect option works fine, but the Dev Reference field not updating is still an issue and needs to be looked into.

EET Issue - Tested Scenario:
“Enhancement” request type in Zendesk should create a ticket in the Jira project EET.
Issue Observed:
This did not work as expected. A Zendesk ticket was created with the requester and assignee set to Grishma (not part of the DevOps/Cloud Services team). After selecting Exalate, the sync status briefly showed “Waiting for remote”, then quickly reverted to “Not synchronized”.

No Jira issue was created, and no error message was displayed.

Please note that, I havent added screenshots here as it was throwing an error, all the details are already added in the POC ticket I mentioned

Hello @spulakhandam ,

I see that you have only shared the ‘Outgoing Sync rule’ from Jira cloud side.
Could you please also share ‘Incoming Sync rule’ from Zendesk, and ‘Outgoing Sync rule’ as well as ‘Incoming Sync rule’ from Jira cloud side?

I see that you have this code line into your Jira - Outgoing Sync rule and please ensure that the codeline for ‘Assignee’ is not provided into Incoming Sync rule on Zendesk side, and vice-versa.

replica.assignee = issue.assignee

Kind regards,
Ashar

Here is the entire script
Latest_Exalate_Scripts.docx (20.8 KB)

Please check from the Jira side using ‘Entity Sync Status tab’ in Remote replica payload if it shows ‘label’ because this is how it works for me.

I created ‘field’ as named ‘Request Type’ with type ‘Drop-down’

From Remote replica on Jcloud side it received as:

    "labels": [
      {
        "label": "defect"
      },
      {
        "label": "select_option"
      }
    ]
//(Sample code snippet)
if (firstSync) {
    issue.projectKey = "TP"
    // Extract all labels as lowercase text
    def labels = replica.labels.collect {
        it.label?.toLowerCase()
    }
    // If one of the labels is 'defect', set issue type to Bug
    if (labels.contains("defect")) {
        issue.typeName = "Bug"
    } else {
        // Otherwise use mapped type or default to Task
        issue.typeName = nodeHelper.getIssueType(replica.type?.name, issue.projectKey)?.name 
            ?: "Task"
    }
}

You can completely remove this codeline from:

Jcloud and Zendesk - Outgoing:-

replica.assignee = issue.assignee

Zendesk - Incoming:-

if (!closedStatus.contains(Jirastatus)) {
    issue.assignee = nodeHelper.getUserByEmail(replica.assignee?.email)
}

And you also have this snippet that you can remove as you don’t want to sync ‘Assignee’ field in both direction and in any case.

Jira - Incoming:-

// This is to ignore the assignee if the type is Bug or Enhancement

List ignoreAssignee = [“Bug”, “Enhancement”]

if(!ignoreAssignee.contains(issue.typeName)){

// If it’s not a Bug or Enhancement, you can set the assignee from Zendesk

issue.assignee = nodeHelper.getUserByEmail(replica.assignee?.email) // Modify this logic if you want to apply specific assignee rules

}

I don’t find script rule for ‘Priority’ and ‘Severity’ fields. However, here are the relevant docs that can help you configure both the fields.

Please find these helpful thorough docs for how to synchronise and filter the comments between Zendesk and Jira cloud.

Kind regards,

Ashar