Associating multiple work items to a commit in DevOps

  • Release version: Xanadu
  • Updated July 31, 2025
  • 2 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Associating multiple work items to a commit in DevOps

    ServiceNow DevOps enables the association of multiple work items to a single commit across supported source control systems including Azure DevOps, Bitbucket, GitHub, and GitLab. This capability helps link development work directly to relevant work items, providing better traceability and alignment between code changes and project tasks or issues.

    Show full answer Show less

    Key Features

    • Supported Commit Message Formats: DevOps recognizes multiple predefined commit message patterns to extract work item IDs, including colon-separated lists (e.g., "STRY1, STRY2:"), hash-prefixed items (e.g., "Fixes for #STRY1, #STRY2"), and Jira-style IDs (e.g., "JRA-123").
    • Custom Commit Message Parsing: Customers can extend the DevopsCommitMessageParserSNC script include by adding custom regular expressions and parsing logic to support organization-specific commit message formats. This flexibility allows recognition of work item IDs expressed in alternative ways, such as IDs enclosed in square brackets.
    • Script Include Extension: The DevopsCommitMessageParser script include extends the base parser, combining out-of-the-box patterns with custom logic to extract unique work item native IDs from commit messages.
    • UI Support: Work items linked to commits are visible in the DevOps Commit record and within the Pipeline user interface, enabling easy verification and navigation for users.

    Practical Use for ServiceNow Customers

    • By leveraging multiple work item association, customers can improve traceability between code commits and work items, leading to enhanced visibility across development and project management teams.
    • Customizing commit message parsing ensures alignment with organizational processes and naming conventions, allowing seamless integration without enforcing rigid commit message standards.
    • Viewing associated work items directly in the DevOps UI simplifies impact analysis and auditing of code changes relative to tracked work.

    Multiple work items for a commit are supported in DevOps for Azure DevOps, Bitbucket, GitHub, and GitLab.

    Work item syntax in the commit message can be customized to reflect the processes in your organization using the DevopsCommitMessageParserSNC script include in the System Definition > Script Includes module.

    In order to link the commits with work items, the work item native ID is extracted from the commit message. In the base system, DevOps supports following commit message formats:
    /**
         * Supported patterns
         * Colon pattern 
             * Sample supported formats: 
                 *   1. STRY1,STRY2: Additional bug fixes
                 *   2. STRY1 , STRY2 : Additional bug fixes
                 *   3. STRY1, STRY2 : Additional bug fixes
         * Hash pattern 
             * Sample supported formats: 
                 *   1. Fixes for #STRY1, #STRY2, #STRY3
                 *   2. Fixes @$#3 and #1 work item
                 *   3. Fixes for #STRY1 #STRY2 #STRY3
                 *   4. Fixes for AB#123
         * Jira pattern
             * Sample supported formats: 
                 *   1. JRA-123 fixed
                 *   2. JRA-123 JRA-234 JRA-345 resolved
         */
    If you want to add support for additional message formats to meet the processes in your organization, you can add a custom logic in the DevopsCommitMessageParser script include by navigating to the System Definition > Script Includes module. DevopsCommitMessageParser script include extends from DevopsCommitMessageParserSNC. The DevopsCommitMessageParserSNC has three regular expressions defined for identifying work item native IDs for supported message formats in the base system. See the following example to include a new custom message format that has work item native IDs in square brackets.
    var DevopsCommitMessageParser = Class.create();
    DevopsCommitMessageParser.prototype = Object.extendsObject(DevopsCommitMessageParserSNC, {
        initialize: function() {
            DevopsCommitMessageParserSNC.prototype.initialize.call(this);
            this._customPattern = /\[(.*?)\]/g; // The regex pattern to match the words written inside square brackets.
            // Example commits message to match this custom pattern is : "[STRY1], [STRY2] Additional bug fixes"
        },
        getWorkitemsFromCommitMessage: function(message, branchName) {
            var workitems = [];
            // We first call the getWorkitemsFromCommitMessage method from the parent class to get the matching workitems ids for OOB formats
            var defaultWI = DevopsCommitMessageParserSNC.prototype.getWorkitemsFromCommitMessage.call(this, message, branchName);
            if (!gs.nil(defaultWI) && defaultWI.length > 0) {
                workitems = workitems.concat(defaultWI);
            }
            // Now call your custom method that returns an array of workitem native IDs matching custom pattern
            var customWI = this.getWIFromCustomPattern(message);
            if (!gs.nil(customWI) && customWI.length > 0) {
                workitems = workitems.concat(customWI);
            }
            // getUniqueWorkItems method from parent class removes duplicates from the workitems array
            workitems = this.getUniqueWorkItems(workitems);
            // return the final list
            return workitems;
        },
        getWIFromCustomPattern: function(message) {
            var wi = [];
            var l;
            var match;
            var matches = message.match(this._customPattern);
            if (gs.nil(matches))
                return wi;
            for (var i = 0; i < matches.length; i++) {
                l = matches[i].length;
                match = matches[i].substring(1, l - 1); // trim the brackets
                wi.push(match);
            }
            return wi;
        },
        type: 'DevopsCommitMessageParser'
    });

    Linking work items to a commit using the Azure DevOps user interface is also supported in DevOps. Link work item to a commit in Azure DevOps

    You can view the list of associated work items in the DevOps Commit record, and in the Pipeline UI.