May 29, 2025

Streamline SPFx Builds with Azure DevOps CI/CD Pipeline – Part 1: Setting Up Continuous Integration

Introduction

If you're developing SharePoint Framework (SPFx) solutions, streamlining your build process is key. In this post, we’ll walk through setting up a Continuous Integration (CI) pipeline using Azure DevOps to automatically prepare your SPFx solution whenever you push code.


Step 1: Set Up the Repo

  • First, create a DevOps repository and add your SPFx source code into a dedicated folder.


Step 2: Create the CI Pipeline

  • Navigate to Pipelines: In Azure DevOps, go to the Pipelines section and click Create Pipeline.

  • Classic Editor: Choose the classic editor for easier configuration.

  • Repo & Branch: Select your repository and branch, then continue.

 

Step 3: Configure Pipeline Jobs

  • Empty Job: Choose the empty job template.
  • Add Tasks:

    1. Node.js Tool Installer : Set the Node.js version required for your SPFx project.
    2. NPM Install: Add the npm task to install dependencies (install command).
    3. Gulp Clean: Add the gulp task with clean.
    4. Gulp Build: Repeat the above for build.
    5. Gulp Bundle: Add another gulp task for bundle.
    6. Gulp Package Solution: Finally, a gulp task for package-solution

    Step 4: Handle Artifacts

    • Copy Files: Add a task to copy the generated .sppkg file from the solution folder to the drop folder.

    Step 5: Publish Artifacts

    Add a task to publish the pipeline artifacts for the next stage.

    Step 6: Set Up Triggers

    In the trigger settings, define the source code path. This ensures that every commit triggers the pipeline automatically.


    Conclusion:

    With this setup, every push to your repository will automatically trigger the CI pipeline, ensuring your SPFx solution is built and packaged consistently.

    Next Up: Part 2 – Deploy SPFx Solution to SharePoint App Catalog using Azure DevOps, we’ll cover how to automate the deployment of the .sppkg file to your SharePoint App Catalog as part of a Continuous Deployment (CD) pipeline.

    If you have any questions you can reach out our SharePoint Consulting team here.

    Streamline SPFx Builds with Azure DevOps CI/CD Pipeline – Part 2: Automating Deployment (CD)

    Introduction

    In the First Part, we built a Continuous Integration (CI) pipeline to automatically package our SharePoint Framework (SPFx) solution. Now it’s time to automate deployment across multiple SharePoint sites using Continuous Deployment (CD).

    This blog covers setting up a CD pipeline in Azure DevOps, triggered automatically after your CI pipeline finishes, to deploy your .sppkg file to all the required sites. 


    Step 1: Prepare Your PowerShell Deployment Script

    We’ll use PowerShell with PnP.PowerShell to handle the deployment. This script connects to SharePoint Online, uploads the .sppkg package, and publishes it on each target site.

    Here's the script:

      Param (  
       [string] $RootPath = $(Throw "Root Path is required."),  
       [string] $ClientId = $(Throw "ClientId is required."),  
       [string] $TenantId = $(Throw "TenantId is required."),  
       [string] $TenantURL = $(Throw "Tenant URL is required."),  
       [string] $ClientSecret = $(Throw "Client Secret is required."),  
       [string] $packagename = $(Throw "Package name is required.")  
     )  
     $SiteURL = "$($TenantURL)/sites/TestSite"  
     $ModernPOPAppPath = "$RootPath\drop\$packagename"  
     $currentPOPSite = ""  
     function ReconnectPNPConnection {  
       Write-Host "Reconnecting to site $($currentPOPSite)"  
       Disconnect-PnPOnline  
       Connect-PnPOnline -Url $currentPOPSite -ClientId $ClientId -ClientSecret $ClientSecret -Tenant $TenantId  
     }  
     function addCustomSPFxApps {  
       $appCatalog = Get-PnPSiteCollectionAppCatalog -CurrentSite -ErrorAction SilentlyContinue  
       while ($null -eq $appCatalog) {  
         Write-Host "Waiting for app catalog creation..."  
         Start-Sleep -Seconds 30  
         $appCatalog = Get-PnPSiteCollectionAppCatalog -CurrentSite -ErrorAction SilentlyContinue  
       }  
       $uploadApp = $false  
       while ($uploadApp -eq $false) {  
         try {  
           Write-Host "Uploading SPFx app..."  
           $App = Add-PnPApp -Path $ModernPOPAppPath -Scope Site -Overwrite -Timeout 900  
           Write-Host "Publishing SPFx app..."  
           Publish-PnPApp -Identity $App.ID -Scope Site -SkipFeatureDeployment -ErrorAction SilentlyContinue  
           Write-Host "SPFx app deployed successfully."  
           Start-Sleep -Seconds 60  
           $uploadApp = $true  
         } catch {  
           Write-Host $_.Exception.Message  
           Write-Host "Retrying after 30 seconds..."  
           Start-Sleep -Seconds 30  
           ReconnectPNPConnection  
         }  
       }  
     }  
     Write-Host -f Cyan "Installing PnP.PowerShell module..."  
     [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12  
     Install-Module PnP.PowerShell -RequiredVersion 2.4.0 -Force -Scope CurrentUser  
     Import-Module -Name "PnP.PowerShell"  
     Write-Host "Connecting to $($SiteURL)..."  
     Connect-PnPOnline -Url $SiteURL -ClientId $ClientId -ClientSecret $ClientSecret -Tenant $TenantId  
     $currentPOPSite = $SiteURL  
     addCustomSPFxApps  
     Write-Host "Disconnecting from $($SiteURL)..."  
     Disconnect-PnPOnline  
    

    We need to upload this PowerShell script to a document folder as shown below and add a step in the CI (Continuous Integration) pipeline to copy this file into the artifacts.


    Step 2: Set Up the CD Pipeline in Azure DevOps

    1. Create the Release Pipeline:

    • Navigate to the Release section in Azure DevOps.
    • Click New Pipeline.

    2. Add Artifacts:

    • Link your CI pipeline’s artifacts (the .sppkg file and related files).test

    3. Enable Continuous Deployment Trigger:

    • Click the lightning bolt icon next to the artifact and enable the trigger to deploy automatically after CI.

    4. Add a Stage:

    • Click Add a stage and choose Empty Job.

    5. Add PowerShell Task:

    • In the stage, click to add a task.
    • Choose PowerShell.
    • Set the script path to point to your deployment script (e.g., Documents/CDScript.ps1).
    • Set the necessary parameters (RootPath, ClientId, TenantId, etc.).

    6. Save and Deploy:

    • Save the pipeline and test it by running the full CI/CD process.

    Conclusion

    By integrating both CI and CD pipelines in Azure DevOps, you’ve established a fully automated and reliable deployment process for your SPFx solutions:

    • CI Pipeline: Automatically builds and packages your SPFx solution on every code push.
    • CD Pipeline: Seamlessly deploys the package to all required SharePoint sites immediately after a successful build.

    This setup not only saves time but also ensures consistency and reduces the risk of manual deployment errors across environments.

    If you have any questions you can reach out our SharePoint Consulting team here.

    How to Use Postman’s Postbot for AI-Powered API Testing

    Introduction

    Postman’s Postbot, an AI-powered assistant, revolutionizes this process by automating and enhancing API testing using intelligent, context-aware suggestions.

    Postbot AI assistant features:

    1. Test Script Generation
    2. Fixed Broken Tests
    3. Expert Debugging
    4. Intuitive Prompt Response
    5. Smart Suggestions
    6. Visualise Responses
    7. Add More Tests
    8. Save a field from response
    9. API Documentation
    10. Test Suite Collection
    11. Get Help

    1. Test Script Generation

    Postbot is an intelligent assistant in Postman that helps you generate automated test scripts for your API endpoints with ease.

    Steps to generate Test Scripts with Postbot:

    • Open Postman
    • Navigate to Script Tab > Click on "Ask PostBot" icon
    • Type a natural language prompt like: "Test if the response status is 200"; "Verify whether the response body has the attribute "token"; "Validate that the array length is 10"; "Ensure the response time is under 500ms"      
    • Postbot automatically generates the relevant JavaScript code for your test case and inserts it directly into your test script area, ready for review and execution.
    • Click “Save” and Run the Request: Postbot’s script will run automatically each time you send the request. 


    2. Fixed Broken Tests

    Postbot AI is a smart assistant in Postman that not only helps generate test scripts—but also diagnoses and fixes broken or incorrect syntax. When test assertions fail, Postbot steps in to identify syntax or logic issues and suggest corrections, saving valuable debugging time.

    Steps to Auto-Fix Script Errors with Postbot:

    • Open Postman
    • Navigate to "Script" tab and write any script (intentionally include a syntax error to test).
    • Run the request by clicking Send. If there's a syntax or runtime error, Postman will highlight it in the test results area.
    • Observe the “Fix Script” Icon. You’ll see a “Fix Script” button/icon next to the error message. This appears when Postbot detects issues it can resolve.
    • Click on “Fix Script". Postbot will analyze the error and automatically suggest or apply a fix. You can review and accept the changes or modify them as needed.

    3. Expert Debugging

    Postbot is available to assist when unexpected errors occur during request execution. We can select 'What's wrong?' in the error message. Any issues that Postbot detects will be reported to you, along with potential fixes.

    Expert Debugging by Postbot empowers developers and testers to:

    • Diagnose failing test scripts
    • Identify syntax errors and runtime issues
    • Automatically fix broken test logic
    • Understand what went wrong and why
    • Receive step-by-step guidance on resolving complex issues

    4. Intuitive Prompt Response

    An intuitive prompt response refers to a system (like Postbot or any AI assistant) that can understand natural, user-friendly input and respond in a way that feels clear, relevant, and context-aware, even if the input is informal or non-technical.

    An intuitive prompt response means you can type and get the output:

    “Check if the response includes an email field and status is 200”

    pm.test("Status is 200", () => {
      pm.response.to.have.status(200);
    });

    pm.test("Response has email", () => {
      const jsonData = pm.response.json();
      pm.expect(jsonData).to.have.property("email");
    });

    5. Smart Suggestions

    Postman's Postbot uses a sophisticated artificial intelligence language model to provide intelligent, context-aware code recommendations right in the test editor,  
    helping developers write effective API tests faster and with greater accuracy.
    How Postbot Enhances Test Writing?
    • Real- Time Code Suggestions: As developers begin typing test scripts in the Tests tab, Postbot proactively suggests common test behaviors, helping avoid boilerplate repetition and syntax errors.
    • Response-Aware Completions: Postbot analyzes the live API response or any saved response examples to generate customized test suggestions that are tailored to the structure and content of the response.
    • Function Name-Based Proposals
    • Data-Driven Test Recommendations
    • Boosts Productivity

    6. Visualise Responses

    We have option to see the results in more intuitive way which is more clear to understand.

    • Visualise response as a table : Can see the response result in tabular form
    • Visualise response as line chart : Can see the response result as line chart
    • Visualise response as a bar chart : Can see the response result as bar chart


    7. Add More Tests

    Add more Test features helps users with some new testcases which would be relevant to current testing.
    • Open any request in Postman.
    • Navigate to the “Script” tab.
    • Click on the “Add More Tests” button (usually found below the test editor).
    • Choose from common test templates or use Postbot to generate custom tests
    • You can ask in plain language (e.g., "Add a test to check if the response time is under 500ms").
    • Click Insert to add the suggested test to your script area.

    8. Save a Field From Response

    You're calling an API, and you want to save a field from the response (e.g., token, userId, orderId) for reuse in:
    • Another request
    • Headers or body
    • Conditional logic in tests

    Steps to save a field from response:

    • Send API request to get a valid response.
    • Navigate to the “Script” tab under the request.
    • Click “Ask Postbot”.
    • Type a prompt like: "Save the Token field from the response to an environment variable"; "Extract userId and store it as a collection variable"
    • Postbot will generate a script for you

    9. API Documentation

    Steps to create API documents:
    • Open Postman and go to your Collection or a specific Request.
    • Navigate to the Documentation section (either in the request pane or via the collection sidebar).
    • Click “Ask Postbot” in the documentation field.
    • Use natural prompts like:  “Write a detailed description of this GET request”; “List the headers and body of this API call in brief.”;  “Add usage examples with response format”; “Generate markdown documentation for this API”
    Postbot will populate or enhance the documentation accordingly. You can review and edit before publishing.

    10. Test Suite Collection

    Steps to create a Test Suit Collection:
    • Open Postman and go to your Collections tab.
    • Click on an existing collection or create a new one.
    • Click on the three-dot menu, next to the collection or folder name and then click on “Generate Tests with Postbot”.
    • In the Postbot sidebar, type a prompt like: “Generate basic tests for all requests in this collection”; “Create a test suite to validate response status, body fields, and response time”; “Add error response validation for each request”

    Postbot will:

    • Add relevant tests to the Tests tab of each mentioned request
    • Suggest test case names and logic
    • Optionally handle parameterized test data (e.g., from CSV/JSON files) 

    11. Get Help

    When you're stuck, there's no need to leave Postman or search the web — Postbot is your in-app AI assistant, ready to help you with contextual, intelligent, and fast answers based on Postman's official Learning Center and trusted community sources.
    • Expertly Curated Instructions: Postbot pulls relevant information from official documentation, tutorials, and FAQs to provide accurate and relevant support, right when you need it.
    • No More Searching: Instead of jumping to external forums or search engines, simply ask Postbot your question directly inside Postman.
    • Context-Aware Help: Whether you're writing tests, debugging scripts, or visualizing responses, Postbot understands your context and offers tailored help.

    Conclusion

    Postbot is more than just a code generator - it’s your AI test partner inside Postman. Whether you're building new APIs, maintaining old ones, or scaling test coverage across teams, Postbot transforms the way you approach API quality.

    If you have any questions you can reach out our SharePoint Consulting team here.