Connecting ServiceNow to Jira
Tags: jira, servicenow, api, javascript
Published: 2024-06-08 19:39:13



*Creating a seamless integration for automatic bug reporting*

---

**Introduction**:

In this guide, we'll walk through the process of integrating ServiceNow's Automated Test Framework (ATF) with Jira. This integration enables automatic bug reporting whenever a test case fails, streamlining the communication between testing and development teams. While this is a personalized approach, it can be adapted to integrate Jira with other functionalities of ServiceNow.

---

**Understanding the Workflow:**

1) **Identifying Triggers:**
   
   We'll set up a business rule in ServiceNow to trigger whenever a test case fails. This rule will be activated when a new entry is inserted in the `sys_atf_test_result` table indicating a failure.

  

>  **Why Use a Business Rule?**
>    A business rule in ServiceNow allows you to execute server-side logic whenever records are inserted, updated, deleted, or queried. It helps automate processes and ensure that specific actions are taken under defined conditions. In this case, the business rule will detect test failures and trigger the creation of a Jira bug.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m0mvtjsjfuopt0fkwfym.png)




   - Navigating to the `sys_atf_test_result` table
   - Setting up the business rule with the correct conditions

2) **Utilizing Jira API:**
   
   We'll leverage the Jira API to create a bug issue in Jira automatically. It's essential to understand the structure of the Jira API. Initially, you can test the API using tools like Postman to ensure it works as expected.
{% embed https://developer.atlassian.com/server/jira/platform/rest-apis/ %}
---

**Implementation Steps:**

3) **Setting Up Credentials:**

   First, securely store your Jira API token and username in ServiceNow. This ensures that your credentials are safely accessed later during the integration process.




   **Steps:**
   - Navigate to the credentials section in ServiceNow.
   - Input your Jira username and API token.

   ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d8nximc9f67zdbrat1j3.png)
   - Storing credentials in ServiceNow

4) **Writing the Business Rule:**

   - Navigate to the `sys_atf_test_result` table either by searching it in the All section or directly entering its name followed by `.list` in the search.
   - Create a business rule triggered on update when the status is 'fail'.

   **Steps:**
   - Go to `sys_atf_test_result` table.
   - Right-click on the table header > Configure > Business Rule.
   - Ensure 'Advanced' is checked since we will write code.
   - Set "When to run" to "After" and check "Update" only.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/440xqrkyad4fc9tlmx5p.png)


   **Filter Condition:**
   

- Status is 'fail'.
- Accessing the `sys_atf_test_result` table
- Configuring the business rule settings
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtuecpz5q429bupmq8qd.png)

5) **Integration with Jira:**

   Using the ServiceNow web service (sn_ws), we will send a REST message to Jira to create a bug issue.

   **Code Snippet:**

   ```javascript
   var request = new sn_ws.RESTMessageV2();
   request.setEndpoint("https://yourcompany.atlassian.net/rest/api/3/issue"); // Replace with a generic URL
   request.setHttpMethod("POST");

   var provider = new sn_cc.StandardCredentialsProvider();
   var credential = provider.getCredentialByID('your_credential_id');
   var user = credential.getAttribute("user_name");
   var password = credential.getAttribute("password");

   request.setBasicAuth(user, password);
   request.setRequestHeader('Accept', 'application/json');
   request.setRequestHeader('Content-Type', 'application/json');
   ```

 
   - Writing and testing the REST message code
   - Setting up credentials in the script

6) **Constructing the Request Body:**

   Retrieve the necessary data such as summary and description from the `sys_atf_test_result_step` table, ensuring to filter for the current test result.

   **Code Snippet:**

   ```javascript
   var testSteps = new GlideRecord('sys_atf_test_result_step');
   testSteps.addQuery("status", 'Failure');
   testSteps.addQuery("test_result", current.sys_id);
   testSteps.query();
   testSteps.next();

   var des = testSteps.description;
   var summary = testSteps.summary;

   // Formatting summary and description
   summary = summary.replace(/['"]/g, '');
   if (summary.includes("\n")) {
       summary = summary.replace(/\n/g, ' ');
   }

   var arr = des.split("\n");
   des = "";
   for (var j = 0; j < arr.length; j++) {
       des += "{\"type\": \"paragraph\",\"content\": [{\"type\": \"text\",\"text\": \"" + arr[j] + "\"}]},";
   }
   des = des.substring(0, des.length - 1);

   var body = "{\"fields\": {\"project\":{\"key\": \"PROJECT_KEY\"},\"summary\":\"" + summary + " " + current.status + "\",\"description\": {\"version\": 1,\"type\": \"doc\",\"content\": [" + des + "]},\"issuetype\": {\"name\": \"Bug\"}}}";

   request.setRequestBody(body);
   var response = request.execute();
   ```

   - Querying and retrieving test step data
   - Formatting the retrieved data

---

**Conclusion:**

By following these steps, you can seamlessly integrate ServiceNow ATF with Jira to automate bug reporting. This approach streamlines the process, ensuring efficient communication between testing and development teams. Feel free to adapt this framework to suit other integration needs within your organization.

**Additional Tips:**

- Regularly test the integration to ensure seamless functionality.
- Keep credentials secure to prevent unauthorized access.
- Document the integration process for future reference and troubleshooting.

---