The ServiceNow Jira integration enables seamless synchronization between ServiceNow change requests, incidents, and problems with Jira issues, allowing development and operations teams to work in their preferred platforms while maintaining visibility across the entire delivery pipeline. This integration is essential for DevOps organizations that use ServiceNow for ITSM processes and Jira for project management and development tracking. The integration supports bidirectional data synchronization, allowing ServiceNow records to automatically create corresponding Jira issues and vice versa, with real-time updates flowing between both systems. The primary automation patterns include Flow Designer workflows triggered by record state changes, scheduled data loads for bulk synchronization, and webhook-based real-time updates, all managed through the Integration Hub Jira spoke within the ServiceNow platform.
Prerequisites
- •ServiceNow Quebec release or later with Integration Hub Professional or Enterprise license
- •Jira Cloud or Jira Server 8.0+ with administrative access to create API tokens
- •Flow Designer activated on the ServiceNow instance
- •Integration Hub plugin (com.glide.hub.integrations) activated
- •Jira spoke installed from ServiceNow Store
- •Network connectivity between ServiceNow instance and Jira server (outbound HTTPS on port 443)
- •ServiceNow admin role or equivalent permissions to configure Connection & Credential Aliases
Architecture Overview
The ServiceNow Jira integration utilizes the official Jira spoke available in Integration Hub, which provides pre-built actions for creating, updating, and querying Jira issues through RESTful API calls. Authentication is established using Jira API tokens stored securely in ServiceNow Connection & Credential Aliases, with the spoke handling OAuth 2.0 or basic authentication depending on your Jira deployment type. Data flows bidirectionally through Flow Designer workflows that can be triggered by record updates, scheduled jobs, or webhook events, with the spoke automatically handling JSON payload transformation and error handling. A MID Server is not required for Jira Cloud integrations but may be necessary for on-premise Jira Server deployments behind corporate firewalls, as the spoke makes direct HTTPS calls to Jira REST APIs. Rate limiting considerations include Jira Cloud's standard API limits of 10,000 requests per hour per app, and the spoke includes built-in retry logic and exponential backoff to handle temporary API throttling gracefully.
Sourdough: ServiceNow Monitoring and Analytics
A Chrome extension for ServiceNow Admins and Developers with essential tools, analytics, graphs and monitoring features.
Free to install. Pro $5/month after a 14-day no-card trial.
Pro requires the ServiceNow admin role. Upgrade inside the extension.
Implementation Steps
Generate Jira API Token and Configure ServiceNow Credentials
In Jira, navigate to Account Settings > Security > Create and manage API tokens, then click 'Create API token' and provide a descriptive label like 'ServiceNow Integration'. Copy the generated token immediately as it cannot be viewed again after creation. In ServiceNow, navigate to Connections & Credentials > Credentials and click 'New' to create a Basic Auth credential. Set the Name field to 'Jira API Credential', enter your Jira username in the User name field, and paste the API token in the Password field, then test the connection to ensure proper authentication.
Create Connection Alias for Jira Instance
Navigate to Connections & Credentials > Connection & Credential Aliases in ServiceNow and click 'New' to create a connection alias. Set the Name to 'Jira Production' and Type to 'HTTP(S)', then enter your Jira base URL (e.g., https://yourcompany.atlassian.net) in the Connection URL field. Select the credential created in step 1 from the Credential dropdown and ensure the 'Active' checkbox is selected. Test the connection by clicking 'Test Connection' to verify that ServiceNow can successfully authenticate with your Jira instance before proceeding.
Install and Configure Jira Spoke from Integration Hub
Navigate to System Applications > All Available Applications > All and search for 'Jira' to find the official Jira spoke in the ServiceNow Store. Click 'Install' and wait for the installation to complete, which typically takes 2-3 minutes. After installation, go to Process Automation > Integration Hub > Connections and locate the Jira connection that was automatically created. Edit this connection to reference your Connection Alias created in step 2, ensuring the spoke uses your configured credentials and connection settings for all subsequent API calls.
Configure Field Mapping Between ServiceNow and Jira
Navigate to System Definition > Tables and locate the tables you want to sync (e.g., change_request, incident). Create custom fields as needed to store Jira-specific data like Jira Issue Key, Project Key, and Issue Type. Document the field mappings between ServiceNow and Jira, such as mapping ServiceNow 'short_description' to Jira 'summary', 'description' to 'description', and 'state' to appropriate Jira status values. Consider creating a mapping table (custom table) to store dynamic field mappings that can be maintained by administrators without code changes, enabling flexible configuration as requirements evolve.
// Custom field mapping function
function mapServiceNowToJira(changeRecord) {
var jiraPayload = {
fields: {
project: { key: gs.getProperty('jira.default.project', 'SNOW') },
summary: changeRecord.short_description.toString(),
description: changeRecord.description.toString(),
issuetype: { name: 'Task' },
priority: { name: mapPriority(changeRecord.priority.toString()) },
labels: ['servicenow', 'change-' + changeRecord.number.toString()]
}
};
return jiraPayload;
}Create Flow Designer Workflow for ServiceNow to Jira Sync
Navigate to Process Automation > Flow Designer and create a new flow with trigger 'Record Updated' on the change_request table. Add a condition to check if the record state changed to a specific value (e.g., 'Implement') and if the Jira Issue Key field is empty to avoid duplicate creation. Add the Jira spoke action 'Create Issue' and configure it to use your connection alias, mapping ServiceNow fields to appropriate Jira fields using the mapping logic defined in step 4. Include an additional step to update the ServiceNow record with the returned Jira Issue Key to establish the link between both records, and add error handling to log failures and optionally notify administrators.
// Flow script step for updating ServiceNow record with Jira key
(function execute(inputs, outputs) {
var gr = new GlideRecord('change_request');
if (gr.get(inputs.change_sys_id)) {
gr.u_jira_issue_key = inputs.jira_key;
gr.u_jira_url = 'https://yourcompany.atlassian.net/browse/' + inputs.jira_key;
gr.update();
outputs.success = true;
} else {
outputs.success = false;
outputs.error_message = 'Change request not found: ' + inputs.change_sys_id;
}
})(inputs, outputs);Set Up Jira to ServiceNow Webhook Integration
In ServiceNow, create a Scripted REST API by navigating to System Web Services > Scripted Web Services > Scripted REST APIs and clicking 'New'. Create a resource with HTTP Method 'POST' and a path like '/jira/webhook', implementing logic to parse Jira webhook payloads and update corresponding ServiceNow records. In Jira, navigate to System > WebHooks and create a new webhook pointing to your ServiceNow Scripted REST API endpoint (e.g., https://yourinstance.service-now.com/api/now/jira/webhook). Configure the webhook to trigger on issue updates and transitions, ensuring the events align with your synchronization requirements and include appropriate JQL filters to limit scope if needed.
(function process(request, response) {
var payload = JSON.parse(request.body.data);
var jiraKey = payload.issue.key;
var newStatus = payload.issue.fields.status.name;
var gr = new GlideRecord('change_request');
gr.addQuery('u_jira_issue_key', jiraKey);
if (gr.next()) {
gr.state = mapJiraStatusToServiceNow(newStatus);
gr.work_notes = 'Updated from Jira: Status changed to ' + newStatus;
gr.update();
response.setStatus(200);
response.getStreamWriter().writeString('Success');
} else {
response.setStatus(404);
response.getStreamWriter().writeString('Record not found');
}
})(request, response);Configure Bidirectional Field Synchronization Rules
Create a configuration table to define which fields should be synchronized in each direction and under what conditions, preventing infinite update loops between systems. Implement logic in both Flow Designer workflows and webhook handlers to check timestamps and determine the source of truth for each update, typically using a 'last_updated_by_system' field or similar mechanism. Add validation rules to ensure data integrity during synchronization, such as checking that Jira status transitions are valid in ServiceNow and vice versa. Consider implementing conflict resolution strategies for scenarios where both records are updated simultaneously, such as using timestamps to determine precedence or requiring manual intervention for certain field conflicts.
// Sync conflict detection and resolution
function shouldSyncField(tableName, fieldName, sourceSystem) {
var syncRule = new GlideRecord('u_integration_sync_rules');
syncRule.addQuery('table_name', tableName);
syncRule.addQuery('field_name', fieldName);
syncRule.addQuery('source_system', sourceSystem);
syncRule.addQuery('active', true);
if (syncRule.next()) {
return syncRule.sync_enabled == true;
}
return false; // Default to no sync if rule not found
}Test Integration and Set Up Monitoring
Create test records in both ServiceNow and Jira to validate bidirectional synchronization, checking that field mappings work correctly and that updates flow in both directions without creating infinite loops. Monitor the System Log, Integration Hub execution history, and any custom logging you've implemented to ensure the integration performs reliably under normal conditions. Set up proactive monitoring by creating ServiceNow events that trigger when integration failures occur, and consider implementing dashboard widgets to track sync success rates and identify patterns in integration errors. Document the complete integration setup, including field mappings, error handling procedures, and troubleshooting steps for ongoing maintenance and support team reference.
// Integration health check script
var integrationHealth = new GlideRecord('u_integration_health_check');
integrationHealth.initialize();
integrationHealth.system_name = 'Jira';
integrationHealth.last_sync_time = new GlideDateTime();
integrationHealth.sync_status = testJiraConnection() ? 'Success' : 'Failed';
integrationHealth.records_synced_today = getRecordsSyncedCount('today');
integrationHealth.insert();Common Use Cases
Change Request to Jira Epic Synchronization
Normal change requests in ServiceNow automatically create corresponding Jira epics when they reach the 'Authorize' state, enabling development teams to plan and track implementation work within Jira. The integration maps change request details like description, business justification, and planned dates to epic fields, while maintaining bidirectional updates for status changes. This use case provides complete traceability from business change approval through technical implementation, ensuring compliance teams have visibility into development progress while allowing technical teams to work in their preferred toolset.
Incident-Driven Bug Creation in Jira
High-priority incidents classified as software defects automatically generate Jira bugs with detailed reproduction steps, error logs, and affected user information transferred from ServiceNow incident records. The integration includes logic to prevent duplicate bug creation by checking for existing Jira issues linked to the same configuration item or service. This streamlines the handoff between support teams managing incidents and development teams fixing underlying software issues, reducing resolution time and improving customer satisfaction through better coordination.
Release Management Coordination
ServiceNow release records trigger creation of Jira projects or versions, with all associated change requests becoming linked Jira issues under that project umbrella. The integration synchronizes release dates, deployment windows, and approval status between both systems, ensuring development teams have current information about release constraints and timelines. This use case enables portfolio-level visibility into release progress while maintaining detailed technical tracking within Jira, supporting both ITIL process compliance and agile development practices.
Problem Management to Jira Investigation Tasks
ServiceNow problem records automatically create Jira investigation tasks when root cause analysis is required, transferring known error details, affected services, and preliminary investigation notes to development teams. The integration maintains linkage between the ServiceNow problem, related incidents, and the Jira investigation work, enabling seamless information flow as root causes are identified and permanent fixes are implemented. This ensures comprehensive problem resolution tracking while leveraging Jira's project management capabilities for complex investigation work involving multiple team members.
Security Incident Response Integration
Security incidents in ServiceNow trigger creation of confidential Jira issues in restricted projects, enabling security teams to coordinate technical remediation work while maintaining appropriate access controls and audit trails. The integration includes special field mappings for security-specific data like threat indicators, affected systems, and containment actions, while ensuring sensitive information remains protected through project-level security configurations. This use case supports coordinated incident response activities across security operations and development teams while maintaining necessary confidentiality and compliance requirements.
Troubleshooting
Jira spoke actions fail with '401 Unauthorized' errors in Flow Designer execution history
Check that your Jira API token hasn't expired and verify the Connection & Credential Alias configuration by testing the connection directly from the alias record. Navigate to System Logs > All Logs and search for Integration Hub entries to see the exact authentication error details. If using Jira Cloud, ensure the API token belongs to a user account with appropriate project permissions, and verify that the Jira base URL in the connection alias matches exactly with your instance URL including any trailing paths.
ServiceNow records are created but Jira webhook updates are not processing
Verify webhook delivery by checking Jira's webhook configuration page for delivery status and any error messages from failed attempts. In ServiceNow, check the Scripted REST API execution logs by navigating to System Logs > REST API and filtering by your webhook endpoint path. Common issues include JSON parsing errors due to unexpected Jira payload formats, missing error handling for webhook authentication, or ServiceNow instance accessibility issues from Jira Cloud servers requiring IP allowlisting.
Infinite update loops between ServiceNow and Jira causing excessive API calls
Implement update source tracking by adding a 'last_updated_by_system' field to your ServiceNow tables and checking this field before triggering outbound synchronization flows. Add conditions to your Flow Designer workflows to skip processing when the update source is the integration itself rather than a human user. Review your webhook handling logic to ensure it updates records with integration system user credentials and sets appropriate flags to prevent triggering outbound flows on those automated updates.
Field mapping failures causing partial record synchronization or data corruption
Add comprehensive validation logic to your field mapping functions that checks for required fields, data type compatibility, and field length limits before attempting synchronization. Implement try-catch blocks around individual field mappings so that one field error doesn't prevent other fields from synchronizing correctly. Create custom logging to capture mapping errors with specific field names and values, and consider implementing a retry queue for failed mappings that can be processed after resolving data quality issues.
Jira spoke connection timeouts during peak usage periods
Review your Connection Alias configuration to ensure appropriate timeout values are set, typically 30-60 seconds for Jira API calls depending on payload size. Check if your Jira instance is hitting API rate limits by monitoring response headers and implementing exponential backoff retry logic in custom scripts. Consider implementing a queue-based approach for high-volume synchronization scenarios using ServiceNow events to decouple real-time user actions from integration processing, reducing the impact of temporary Jira performance issues.
Missing or incorrect project permissions preventing issue creation in specific Jira projects
Verify that the Jira user account associated with your API token has 'Create Issues' permission in the target project by testing issue creation manually through the Jira web interface. Check project-level permission schemes and ensure the integration user is assigned to an appropriate role, typically 'Developers' or a custom integration role with necessary permissions. Implement error handling in your flows to catch permission-related errors and route them to appropriate administrators, and consider using different Jira users or API tokens for different projects if permission requirements vary significantly.
Pro Tips
- →Implement custom Transform Maps for bulk data synchronization scenarios where Flow Designer's real-time processing would be inefficient, using scheduled import jobs with the Jira REST API to handle large volumes of historical data migration. Create reusable subflows in Flow Designer for common Jira operations like field mapping and error handling, which can be shared across multiple integration workflows and maintained centrally as business rules evolve.
- →Use ServiceNow's Integration Hub Connection testing capabilities proactively by setting up scheduled business rules that test Jira connectivity and create ServiceNow events when failures are detected, enabling proactive issue resolution before users are affected. Configure separate Connection Aliases for different environments (development, staging, production) to enable proper testing workflows and prevent accidental cross-environment data synchronization during development activities.
- →Leverage Jira's JQL filtering capabilities in webhook configurations to minimize unnecessary webhook calls to ServiceNow, improving performance and reducing the risk of hitting API rate limits during high-activity periods. Implement webhook signature validation using Jira's webhook security features to prevent unauthorized parties from triggering integration workflows and potentially corrupting data or causing performance issues.
- →Create custom ServiceNow reports and dashboards to monitor integration health metrics like sync success rates, average processing times, and common error patterns, enabling data-driven optimization of field mappings and processing logic. Use ServiceNow's Table API and GlideAggregate to build integration analytics that help identify patterns in sync failures and optimize retry strategies based on actual usage patterns.
- →Implement intelligent conflict resolution by storing integration metadata like last sync timestamps and field-level change tracking, enabling sophisticated conflict detection and resolution strategies that consider business context rather than just technical timing. Design your field mappings to be configuration-driven rather than hard-coded, using custom tables or system properties to store mapping rules that business users can adjust without requiring code changes.
- →Consider implementing asynchronous processing patterns using ServiceNow events for complex synchronization scenarios involving multiple related records, preventing timeout issues and improving user experience by decoupling user actions from integration processing time. Use Flow Designer's error handling capabilities to implement sophisticated retry logic with exponential backoff and circuit breaker patterns to gracefully handle temporary Jira outages or performance issues.
Known Limitations
- —Jira Cloud enforces API rate limits of 10,000 requests per hour per connected app, which can be restrictive for organizations with high-volume synchronization requirements or multiple ServiceNow instances connecting to the same Jira instance. The Integration Hub Jira spoke does not include built-in bulk operations, requiring custom REST message implementations for scenarios involving synchronization of hundreds or thousands of records within short time windows.
- —File attachments cannot be synchronized bidirectionally through the standard Jira spoke actions, requiring custom REST API implementations using GlideHTTPRequest or RESTMessageV2 to handle attachment upload and download between systems. The spoke's field mapping capabilities are limited to standard Jira fields and cannot automatically handle custom field synchronization without additional scripting and configuration work.
- —Real-time bidirectional synchronization introduces complexity around conflict resolution when both systems are updated simultaneously, and the spoke does not provide built-in mechanisms for detecting or resolving such conflicts automatically. Webhook reliability depends on network connectivity and Jira Cloud's delivery guarantees, with no built-in message queuing or guaranteed delivery mechanisms for critical updates that must not be lost.
- —The integration requires careful management of user context and permissions, as Jira API operations are performed under a single service account, potentially limiting visibility into who actually made changes in the originating system. Large text fields and complex formatting may not translate properly between ServiceNow's rich text capabilities and Jira's markup syntax, requiring custom transformation logic for proper rendering in both systems.
Frequently Asked Questions
Can I synchronize custom fields between ServiceNow and Jira using the Integration Hub spoke?
Yes, but custom field synchronization requires additional configuration beyond the standard spoke actions. You'll need to identify the custom field IDs in both systems and create custom field mapping logic in your Flow Designer workflows or scripted REST APIs. For Jira custom fields, use the field ID format like 'customfield_10001' rather than the display name, and ensure the ServiceNow custom fields have appropriate data types and lengths to accommodate the Jira field values. Consider creating a mapping configuration table to make custom field relationships maintainable by administrators.
How do I prevent infinite loops when implementing bidirectional synchronization?
Implement update source tracking by adding fields like 'last_updated_by_system' to your ServiceNow records and checking this value before triggering outbound synchronization flows. Use Flow Designer conditions to skip processing when updates originate from the integration user rather than human users, and ensure your webhook handlers set appropriate system flags when updating records from Jira. Additionally, implement timestamp-based conflict detection to determine which system has the most recent changes when simultaneous updates occur, and consider using ServiceNow events to decouple update processing from real-time user actions.
What happens if the Jira integration fails during a critical change deployment process?
Design your integration with appropriate error handling and fallback procedures to ensure ServiceNow change management processes can continue even when Jira is unavailable. Implement try-catch blocks in your Flow Designer workflows with alternative actions like creating ServiceNow tasks for manual Jira issue creation, and use ServiceNow events to queue failed synchronization attempts for retry when connectivity is restored. Consider implementing circuit breaker patterns that temporarily disable automatic synchronization during extended outages while maintaining manual override capabilities for critical situations. Document clear procedures for operations teams to handle integration failures during change freezes or emergency deployments.
Can I synchronize Jira sprints and epics with ServiceNow project and portfolio management?
The standard Jira spoke focuses primarily on issue-level synchronization, but you can extend it to handle Jira Agile concepts by using additional REST API calls to retrieve sprint and epic information. Create custom Flow Designer workflows that query Jira's Agile REST APIs to synchronize sprint data with ServiceNow project tasks or custom agile tables, and map Jira epics to ServiceNow demand or project records. This requires additional API calls beyond the spoke's standard actions and careful handling of Jira's agile hierarchy relationships. Consider the API rate limit implications when synchronizing large numbers of sprints and epics, and implement appropriate caching strategies for frequently accessed agile data.
How do I handle Jira project permissions and security when integrating with ServiceNow?
Configure your Jira API user with appropriate project-level permissions and consider using project-specific service accounts if different ServiceNow applications need access to different Jira projects. Implement validation logic in your integration workflows to check project accessibility before attempting issue creation, and handle permission errors gracefully by routing failed requests to appropriate administrators. For sensitive projects, consider implementing additional approval workflows in ServiceNow before creating Jira issues, and use Jira's project security schemes to ensure the integration respects existing access controls. Document the required permissions clearly and monitor for permission-related errors that might indicate changes to Jira project configurations.
What is the best approach for migrating existing data when implementing the Jira integration?
Start with a one-time bulk synchronization using ServiceNow's Transform Maps or custom scripts with the Jira REST API to establish initial linkages between existing records. Create a staging table to validate field mappings and data quality before updating production records, and implement comprehensive logging to track migration progress and identify any data inconsistencies. Use Jira's bulk APIs where available to minimize the number of API calls during migration, and consider implementing the migration in phases, starting with the most critical record types and recent data. Plan for manual cleanup of any mapping errors or data quality issues identified during the migration process, and maintain detailed documentation of what was migrated and any exceptions that require ongoing attention.
How can I monitor and troubleshoot the Jira integration performance?
Leverage ServiceNow's built-in Integration Hub execution history and system logs to monitor flow performance and identify bottlenecks or error patterns. Create custom dashboards using Performance Analytics to track integration metrics like sync success rates, processing times, and error frequencies over time, and set up automated alerts when error rates exceed acceptable thresholds. Implement custom logging in your integration scripts that captures business-relevant details like record types processed and field mapping results, and use ServiceNow's Event Management to create proactive monitoring for integration health. Consider implementing synthetic monitoring that periodically tests the integration with dummy data to ensure ongoing functionality even during low-activity periods.
Test Your Knowledge
Quick 3-question quiz — see how your ServiceNow skills stack up.
A list view on a table with millions of records is slow. Best fix?
Select an answer to continue