NagendrabaM
ServiceNow Employee

Overview

This guide explains how to integrate Enterprise Agile Planning (EAP) with Azure DevOps (ADO) using a three-layer integration approach:

These steps apply exclusively to ADO teams integrated via SAFe, where Iterations/Sprints can only be created from EAP.

EAP → SAFe → ADO
 

  • EAP → SAFe: Custom Business Rules sync Planning Intervals, Sprints, Features and Stories from EAP tables to SAFe tables
  • SAFe → ADO: Existing OOB ADO integration syncs SAFe records to ADO work items
  • ADO → SAFe → EAP: Reverse sync flows back through the same layers through Internal integrations for Features and Stories
     

Who Should Use This Integration?

  • Organizations using Enterprise Agile Planning (EAP) as their planning tool and Azure DevOps as their execution tool
  • Organizations following the SAFe framework with Program Increments, Sprints, Features and Stories
  • This approach bridges EAP and ADO through SAFe as an intermediary layer.
     

Limitations of This Approach

Before proceeding, it's essential to be aware of the following limitations:

  1. Direct EAP ↔ ADO integration does not exist yet — SAFe acts as intermediary
  2. Planning Iterval/Sprint creation must originate in EAP — sprints flow EAP → SAFe → ADO
  3. Iterations should not be created from ADO / SAFe.
  4. SAFe teams must be configured under EAP and SAFe Agile release train before creating Planning Intervals
  5. Team Integrations Settings should be created for all the SAFe teams associated to ART before Creating Planning Intervals in EAP side under EAP ART.
  6. Sprint calendar spans must exist for each PI before clicking "Create Next Planning Interval"
  7. EAP Agile Release Train must be linked to SAFe ART field before clicking "Create Next Planning Interval".
  8. Populate Assignment group(when creating Feature in EAP side along with Team(Team field should be EAP ART) and assignment group should be SAFe Team.
  9. Sprint name will show as per SAFe Sprint naming conventions in Azure.

 

Steps to setup this integration:

Step 1: Import all below mentioned update sets in below order

1.EAP To ADO Integration- SAFe.xml

2.EAP To ADO Integration- PP Shared.xml

3.EAP To ADO Integration- PP Internal.xml
4.EAP To ADO Integration- Portfolio Planning Core.xml

5.EAP To ADO Integration- Strategic Planning.xml
 

Step 2: Create Azure Devops(ADO) Project Of type SAFe in Azure and Discover projects.
Create and Configure External Integration Table/Field Mapping for User Story and Feature records under Process Mapping Related List > SAFe > Table Maps

For User Story Mapping:

1.Change Internal Table field from Story [rm_story] to sn_safe_story
2.Change System.Parent field map from sn_safe_epic to sn_safe_feature

 

NagendrabaM_0-1776276159012.png


For Feature Mapping
Create a new mapping for Feature table as mentioned below
 

NagendrabaM_1-1776276159015.png


Step 3: Modify the Business Rule conditions on SAFe feature and Story
1.Go to Business rules > Search for "Synch SAFe feature with Azure DevOps" BR and Remove the existing condition Value gs.getSession().isInteractive(); and replace with current.getValue('sys_updated_by') != 'system'

 

2.Go to Business rules > Search for "Synch Story with Azure DevOps" BR and Remove the existing condition Value gs.getSession().isInteractive(); and replace with current.getValue('sys_class_name') === 'sn_safe_story' && current.getValue('sys_updated_by') != 'system'

 

3.Go to Business rules > Search for "Sync PI with ADO Iterations" BR and Remove the gs.getSession().isInteractive(); from existing condition Value and replace with current.getValue('sys_updated_by') != 'system'

Final condition Value should be like this “current.getValue('sys_updated_by') != 'system' && ( current.operation() === 'delete' ||  (current.start_date.changes() || current.end_date.changes() || current.short_description.changes()))”

 

4.Go to Business rules > Search for "Sync Program Sprint with ADO Iterations" BR and Remove the gs.getSession().isInteractive(); from existing condition Value and replace with current.getValue('sys_updated_by') != 'system'

Final condition Value should be like this “current.getValue('sys_updated_by') != 'system' && (current.operation() === 'delete' || current.short_description.changes())”

 

Step 4: Check Internal Integration Table/Field Mapping for Story and Feature records under Strategic planning > Integrations > ServiceNow Internal(Record)

 

For SAFe Feature(sn_safe_feature) Table Map
 

NagendrabaM_2-1776276159019.png


For SAFe Story(sn_safe_story) Table Map
 

NagendrabaM_3-1776276159024.png

 

NagendrabaM_4-1776276159025.png

 

Step 5: Add SAFe Team to EAP Agile Release Train in Enterprise Agile Planning

1.Before adding SAFe Team to EAP Agile release Train, Create EAP Agile release Train and associate corresponding SAFe ART
2.Go to sn_apw_advanced_agile_team.LIST
  

  • Click on New button
  • Enter SAFe team Name
  • Select Enterprise Agile configuration(Essential or Portfolio Configuration)
  • Select Parent(This should be EAP ART which is linked to SAFe ART)
  • Select User group(This should be SAFe team which is associated to SAFe ART and has Team Integrations Settings
     

NagendrabaM_5-1776276159027.png

 

Step 6: Add SAFe ART field to Enterprise Agile release Train (Default view)


Step 7: Add Assignment group field to EAP feature(EAP New view)

While creating feature in EAP, populate both Team as EAP ART and Assignment group(SAFe Team - As per the ADO team integrations created for SAFe teams which are part of SAFe ART)

 

By following these steps, you can successfully integrate Enterprise Agile Planning (EAP) with AzureDevOps (ADO). This setup enables users to track the progress of Planning intervals, Sprints, Features, Stories and other work items within EAP and SPW while ensuring smooth synchronization between ServiceNow and Azure DevOps (ADO).

Version history
Last update:
6 hours ago
Updated by:
Contributors