Labels field is one of the standard fields of an issue. You can synchronize it as any other issue field.

This article provides description and scripts that help to synchronize issue labels. 

Label issue field reference.

Source instance

Outgoing sync 

send them to the destination instance:

replica.labels = issue.labels

Specify the labels which should be sent 

If you want to sync only some of the existing labels, you can specify that directly in the Data Filter.

For example, send only labels starting with pub_ :

replica.labels = issue.labels.findAll { it.label.startsWith("pub_") }
...


Destination instance 

Incoming sync

Create received labels on the destination side. Helps to create the labels automatically and add them to the label field.

#
# add all labels from the replica to the synced issue
#
issue.labels = replica.labels
...


You can use nodeHelper getLabel in case you want to assign a new label to your issue, depending on the remote issue details.

For example:  if the remote issue has type 'new feature request', label the  issue 'uservoice'

if (replica.issueType.name == "New Feature") {
   issue.labels += nodeHelper.getLabel("uservoice")
}


Syncing labels from Github to Jira


GitHub allows to include spaces in the labels, while it's impossible to have ones in Jira.

Please use the following code in the Incoming sync on Jira side to sync labels from GitHub to Jira.

The code helps to transform labels with spaces (received form GitHub) to the Jira required format(without spaces).

issue.labels = replica.labels.collect { it.label.repalce("\\s", "_"); it }