Skip to content

Deployment Steps - 2025_JUL_01

Deployment

Potential Issues

  1. If the deployment admin does not have access to Storage Accounts, the Storage Account deployment part will fail. There are no changes to the storage accounts in this release, so this can be ignored
  2. The Custom Functions Function App (npobp_common) tends to have trouble with deployment and may need to be manually deployed
  3. The Seed Data step may not work if APIM is secured within a vnet. In that instance, the #Manual Steps below will allow the same changes to be added manually

Prerequisites

We will follow the deployment instructions from: Hosted Model Deployment Guide Please read and understand the additional prerequisites below before continuing:

  1. Ensure the logged in user has access to the following storage accounts. If the storage account is part of a VNet, the user's IP address needs to be explicitly added:
    1. Data Store - Master (npobp_mast)
    2. Data Store - Reporting (npobp_custrep)
    3. Data Store - Execution (npobp_custexec)
    4. Data Store - Configuration (npobp_custconfig)
  2. Do the same for the following, for both the Main site and Advanced Tools site:
    1. NPO Portal (npobp_portal)
    2. Portal Backend (npobp_portalbackend)
  3. In your existing customerconfig.json file, ensure the following settings are correct:
    1. prerequisutes.validateEnabled
    2. otherSettings.downloadAdditionalScripts
    3. otherSettings.downloadArtifacts
  4. The Custom Functions Function App (npobp_common) function app tends to fail when run manually through the script, so it may need to be manually redeployed
    $resourceGroupName = 'NAME_OF_YOUR_RESOURCE_GROUP'  
    $functionAppName = 'NAME_OF_YOUR_COMMON_FUCNTION_APP'  
    $deployZipPath = 'PATH_TO_THE_ARTIFACTS_ZIP_FILE_IN_ARTIFACT_FOLDER_34'
    
    az account set --subscription ""
    
    az functionapp deployment source config-zip `  
                    --resource-group $resourceGroupName `  
                    --name $functionAppName `  
                    --src $deployZipPath
    

Manual Steps:

We need to upgrade the .NET framework for all the function apps to .NET 8 Isolated. This can be done manually or via script.

The affected function apps are: - Config Function App (npobp_config) - Master Maintenance Service (npobp_mastmaint) - Translation Layer - Dataverse (npobp_trdataverse) - Translation Layer SQL (npobp_trsql) - Execution Engine (npobp_exec) - Polling Engine (npobp_poll)

This script will use deployment slots to allow for rollback if we have issues with the .NET upgrade

  1. Download the script from the link provided to you by ProcessFactorial
  2. In the downloaded script, open the script and replace the following parameters:
    1. $TenantId
    2. $SubscriptionId
    3. $ResourceGroup
    4. $FunctionApps
  3. Run the script .\UpdateDotNetFunctionApp.ps1. This will update each of the function apps to .NET 8 isolated:
    1. Confirm that Settings -> Environment Variables has FUNCTIONS_WORKER_RUNTIME as dotnet-isolated
    2. Confirm that Settings -> Configuration -> General Settings (tab) has .NET Version as .NET 8 Isolated
  4. Now run the normal deployment as usual (Hosted Model Deployment Guide#Deployment)

If issues happen during deployment or smoke testing, we can swap the deployment slots back by running the .\SwapDeploymentSlots.ps1 script again. The way to know which is the correct deployment is to look at the Environment Settings. The dotnet-isolated is the new version and dotnet is the original (rollback) version.

Later, to delete the staging slots, run .\DeleteStagingSlots.ps1

The manual method (fallback)

For each of the function apps: 1. Open the function app In Azure Portal 2. Go to Settings -> Environment Variables 1. Update FUNCTIONS_WORKER_RUNTIME from dotnet to dotnet-isolated 2. Save 3. Go to Settings -> Configuration -> General Settings (tab) 1. Change the .NET Version to .NET 8 Isolated 2. Save 4. If issues happen during deployment: 1. Manually revert the changes above 2. Redeploy the previous version (2025_JUN_04) again