Skip to main content
Version: v6.0.0

Dashboard Release Pipeline

The release pipeline will use the artifacts created from the build pipeline and publish this to the stage(s) you define. Each stage will deploy the resources to the Azure subscription and resource group you specify in the deployment tasks.

The release uses variable groups and edits/adds variables to the groups, we will begin by creating a new variable group.

Variable Group

Create a variable group named {prefix}.Invictus.{stage} for all the stages (environments) and add at least one variable (eg: Invictus.Secrets.ApiKey1.Name = apikey1).

Make sure the Project Collection Build Service has Administrator access to these variable groups (Pipelines > Library > Security)

Library Security

YAML Release Pipeline

This contains an example YAML pipeline to release the Invictus for Azure Dashboard, change the dashboard.release.yaml file according to your needs, for example change the needed environments and change the name of the build pipeline trigger:

resources:
pipelines:
# Name of the pipeline resource inside this workflow. Used to reference the pipeline resources later on (e.g. download artifacts).
- pipeline: _build
# Name of the pipeline in Azure Pipelines
source: 'customer.azure.invictus.dashboard.build'
trigger: true

Also make sure to change the bicep template parameters according to your needs.

If you need to overwrite more bicep Template parameters make sure to add this to the deployScriptParameters. A complete list of Bicep Template parameters can be found here.

Afterwards add the dashboard.release.yaml in your DevOps environment as a pipeline.

Deploy Script Parameters

The following script parameters are used in the deploy script:

Mandatory Parameters

Argument nameDescription
artifactsPathPath on the DevOps agent where the downloaded Invictus artifacts are stored
(publish and download build artifacts)
devOpsObjectIdObject ID of the service principal that's connected to the DevOps service connection, which will get the necessary role definitions to interact with Invictus' deployed resources (i.e. Key vault, Container registry) (Azure CLI task)
acrUsernameACR credentials provided by Codit to pull Invictus images
See build pipeline
acrPasswordACR credentials provided by Codit to pull Invictus images
See build pipeline
resourcePrefixPrefix used for deployed Azure resources (i.e. invictus-{prefix}-vlt)
resourceGroupNameName of Azure resource group where Invictus should be deployed
variableGroupNameDevOps variable group to write the Bicep outputs to (i.e. Invictus_CosmosDb_DbName)
azureActiveDirectoryClientIdSee Azure AD Setup if AD enabled
azureActiveDirectoryTenantIdSee Azure AD Setup if AD enabled
azureActiveDirectoryClientSecretSee Azure AD Setup if AD enabled
azureActiveDirectoryAudienceSee Azure AD Setup if AD enabled
performSqlDataMigrationIf value is 1 the data migration process will run, migrating SQL data to Cosmos DB. If the value is 0, the process will be skipped. See the migration guide for more details. Once data migration has been performed and verified, it is recommended to then set this value to 0 so that the migration process is skipped for all subsequent releases.
flowDataTTLInDaysAmount of days flow data can live in the database
See import flow traces.
isProvisionedCosmosIf the value is 1, a Cosmos DB with provisioned throughput will be deployed. If the value is 0, a serverless Cosmos DB will be deployed instead. See the relevant section below for more details.
identityProviderApplicationIdSee Container Authentication.
identityProviderClientSecretSee Container Authentication.

Optional Parameters

Argument nameDefault valueDescription
resourceGroupLocation'West Europe'Azure location where resources should be deployed
isAdDisabledFalseBoolean flag to indicate whether the Dashboard should use AD for authentication
additionalTemplateParameters[]Additional named parameters for the Bicep template you wish to override. More on this below.

The AdditionalTemplateParameters can be used to override the default values used by the Bicep template. You simply name the argument as the parameter. For example if you want to use a different servicePlanSku you would add -eventHubSkuName 'Standard' to the parameters of the ./Deploy.ps1 script.

Full YAML task example
- task: AzureCLI@2
displayName: 'Azure CLI'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
inputs:
azureSubscription: '[YOUR_SERVICE_CONNECTION]'
addSpnToEnvironment: true
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |

# Determine where the the provided Invictus 'Deploy.ps1' script is located
$artifactsPath = ${{ variables['Pipeline.Workspace'] }} + '/_build/dashboard'
$scriptPath = $artifactsPath + '/Deploy.ps1'

# Use your service connection's service principal Object ID
$objectId = (az ad sp show --id $env:servicePrincipalId | ConvertFrom-Json).id

& $scriptPath `
-artifactsPath $artifactsPath `
-acrPath 'invictusreleases.azurecr.io' `
-useBeta false `
-acrUsername 'admin' `
-acrPassword '<pass>' `
-resourcePrefix 'dev' `
-resourceGroupName 'my-client-dev-rg' `
-variableGroupName 'My.Client.Dev' `
-devOpsObjectId $objectId `
-performSqlDataMigration 0 `
-isProvisionedCosmos 0 `
-azureActiveDirectoryClientId '4b559bfb-871a-4013-bce9-829e3aeb6bdd' `
-azureActiveDirectoryTenantId '97a944a1-04a0-45d2-b2f3-c424755c4167' `
-azureActiveDirectoryClientSecret '<pass>' `
-azureActiveDirectoryAudience 'https://contoso.com' `
-identityProviderApplicationId 'c84d34ea-f169-4787-a4af-81750debda0b' `
-identityProviderClientSecret '<pass>' `
-isProvisionedCosmos 1 `
-flowDataTTLInDays 90

Bicep Template Parameters

The below tables lists the parameters accepted by the Bicep template.

Top-level parameters

Resource-independent parameters that affect all resources in the deployed resource group.

ParameterRequiredDefaultDescription
resourcePrefixYesPrefix used for deployed Azure resources (i.e. invictus-{prefix}-vlt)
devOpsObjectIdYesObject ID of the service principal that's connected to the DevOps service connection, which will get the necessary role definitions to interact with Invictus' deployed resources (i.e. Key vault, Container registry) (Azure CLI task)
containerAppsEnvironmentLocationNoresourceGroup().locationLocation of the ACA environment and Container Apps.
containerAppsEnvironmentNameNoinvictus-${resourcePrefix}-caeThe name of the Container App environment.
Active Directory parameters

Parameters related to the Azure Active Directory where the groups are synced from.

ParameterRequiredDefaultDescription
azureActiveDirectoryClientIdYesClient AAD ID required to enable AAD for dashboard
azureActiveDirectoryTenantIdYesTenant AAD ID required to enable AAD for dashboard
azureActiveDirectoryClientSecretYesRequired for AD Login
AzureActiveDirectoryAudienceYesRequired for AD Login
isAdDisabledNo0isAdDisabled true or false
App service parameters

Parameters related to the applications that are deployed, mostly Azure Functions.

Function names

ParameterRequiredDefaultDescription
invictusDashboardWebAppNameNoinvictus-{resourcePrefix}-invictusdashboard-v2Name for the dashboard web application
invictusDashboardGatewayFunctionNameNoinvictus-{resourcePrefix}-dashboardgatewayName for Azure Function
invictusImportJobFunctionNameNoinvictus-{resourcePrefix}-invictusimportjobName for Azure Function
invictusCacheImportJobFunctionNameNoinvictus-{resourcePrefix}-cacheimportjobName for Azure Function
invictusStoreImportJobFunctionNameNoinvictus-{resourcePrefix}-storeimportjobName for Azure Function
invictusFlowHandlerFunctionNameNoinvictus-{resourcePrefix}-flowhandlerjobName for Azure Function
invictusGenericReceiverFunctionNameNoinvictus-{resourcePrefix}-genericreceiverName for Azure Function
invictusHttpReceiverFunctionNameNoinvictus-{resourcePrefix}-httpreceiverName for Azure Function
invictusDatabaseManagerFunctionNameNoinvictus-{resourcePrefix}-database-storeimportjobName for Azure Function
invictusDataFactoryReceiverFunctionNameNoinvictus-{resourcePrefix}-datafactoryreceiverName for Azure Function

Function deployment

ParameterRequiredDefaultDescription
servicePlanNameNoinvictus-{resourcePrefix}-appplan-linuxName for the service plan which will host the APIs
servicePlanSkuNameNoS1Size for the App Plan, the value of "I1" needs to be passed to install an isolated plan.
servicePlanSkuCapacityNo1The SKU capacity setting for the App Plan
Storage parameters

Parameters related to the data that is stored throughout Invictus.

Cosmos

ParameterRequiredDefaultDescription
cosmosAccountNameNoinvictus-{resourcePrefix}-cosmos-serverless/provisonedName for Cosmos account
cosmosDatabaseNameNoInvictusDashboardName for Cosmos database
isProvisionedCosmosYes0 (:true)isProvisionedCosmos true or false
Provisioned Throughput vs Serverless Cosmos DB
AspectServerless in ProductionProvisioned Throughput in Production
Cost-EfficiencyOptimized for variable workloads; scales down during low activity to reduce costCosts are fixed based on allocated RU/s; autoscale introduces a min-max pricing range
Traffic HandlingIdeal for sporadic or bursty traffic patternsSuitable for consistently high or predictable workloads
ScalabilityAuto-scales based on workload; FlowData and WorkFlowEvents most affectedRU/s can be manually adjusted for high-volume needs
Usage SuitabilityBest for unpredictable workloads with fluctuating volumeBest for stable, high-throughput scenarios
Collections BehaviorFlowData and WorkFlowEvents auto-scale with data insertionFlowData and WorkFlowEvents have fixed RU/s with autoscale range

Always evaluate your application's needs and monitor performance to ensure the chosen capacity model meets expectations in the production environment.

Default Settings for Provisioned Throughput

CollectionRU/sAutoscale
Audits500No
DashboardSettings500No
Users500No
Groups500No
Statistics500No
FolderFlows500No
FlowData2000Yes
WorkflowEvent2000Yes
MessageContent2000Yes

Storage account

ParameterRequiredDefaultDescription
storageAccountNameNoinvictus{resourcePrefix}storeName for the Azure Storage resource. Dashes (-) will be removed from {resourcePrefix}
storageAccountTypeNoStandard_LRSThe Storage account StorageAccountSkuType
messageStatusCacheDeleteAfterDaysNo30The number of days without modification for the message status cache to be deleted

Cleaning data

ParameterRequiredDefaultDescription
flowDataTTLInDaysYesA positive integer value which represents the amount of days flow data can live in the database
statisticsCutOffDaysNo-3The number of days in the past that homepage statistics will recalculate
cleanupJobIntervalInMinutesNo1440Interval in minutes for the cleanup job
workFlowCleanupJobIntervalInMinutesNo180Interval in minutes for the workflowevent cleanup job
dataWorkFlowCleanupMaxRetentionDaysNo90Max number of days the WorkFlowEvent data is stored
Messaging parameters

Parameters related to the messaging resources that import the flow information into storage.

Service Bus

ParameterRequiredDefaultDescription
serviceBusNamespaceNameNoinvictus-{resourcePrefix}-sbsName for the Service Bus Namespace resource
serviceBusSkuNameNoStandard or Premium if VNET enabledName for the Service Bus SKU

Event Hubs

Namespace

ParameterRequiredDefaultDescription
eventHubNamespaceNameNoinvictus-{resourcePrefix}-evnmName for the Event Hub Namespace resource
eventHubSkuNameNoBasicThe SKU name of the EventHub Namespace
eventHubSkuTierNoBasicThe Tier name for the EventHub Namespace
eventHubSkuCapacityNo1The SKU capacity for the EventHub Namespace
eventHubAutoInflateNofalseThe EventHub setting to enable auto-inflate
eventHubMaxThroughputUnitsNo0Max throughput setting for EventHub
eventHubMessageRetentionInDaysNo1

The number of days EventHub will retain messages.
Note: eventHubSkuName and eventHubSkuTier must be set to Standard to exceed 1 day of retention.

Hubs

ParameterRequiredDefaultDescription
eventHubNameNoinvictus-{resourcePrefix}-evhbName for the Event Hub created on the Namespace
eventHubNameV2Noinvictus-{resourcePrefix}-evhb-v2Name for the Event Hub for standard LA's created on the Namespace
workflowEventHubNameNoinvictus-{resourcePrefix}-workflow-evhbEventHub name for the import job
dataMergeWorkflowEventHubNameNoinvictus-{resourcePrefix}-mergeddata-evhbEventHub name for the data merge import job
sideTasksWorkflowEventHubNameNoinvictus-{resourcePrefix}-sidetasks-evhbEventHub name for the side tasks
dataFactoryEventHubNameNoinvictus-{resourcePrefix}-df-evhbEventHub name for the data factory import job
genericEventHubNameNoinvictus-{resourcePrefix}-genericreceiver-evhbEventHub name for the import job
Secret parameters

Parameters related to the security of the deployed applications.

ParameterRequiredDefaultDescription
keyVaultNameNoinvictus-{resourcePrefix}-vltName for the Key Vault Service Namespace resource
keyVaultEnablePurgeProtectionNonullIf true, enables key vault purge protection. Once enabled, this property can never be disabled.
jwtSecretTokenNoGenerated on first useJWT Secret used for login
Observability parameters

Parameters related to the observability of the deployed applications.

ParameterRequiredDefaultDescription
appInsightsNameNoinvictus-{resourcePrefix}-appinsName for the Application Insights resource
alertingAppInsightsNameNoinvictus-{resourcePrefix}-alertingappinsName for the Application Insights resource used for alerting
importjobAppInsightsNameNoinvictus-{resourcePrefix}-importjobappinsName for Application Insights used by importjob
appInsightsSamplingPercentageNo1The sampling percentage for the Application Insights resource
importJobAppInsightsSamplingPercentageNo1The sampling percentage for the import job Application Insights resource
Scaling parameters

Azure Container Apps allow for flexible scaling customization. In Invictus we have provided default scaling values which can be customized according to your scenario.

Container Apps have the ability to scale down to zero replicas. This is a great cost-saving option especially for components which are not used at all. An Azure Container App scaled to zero will automatically scale out when triggered, however this may take up to a few minutes to complete. This could prove to be an issue in scenarios with limited timeout e.g. logic apps with 120 seconds timeout. In such cases there is no option but to set a minimum replica count of 1.

ParameterRequired
dashboardScalingNo
dashboardGatewayScalingNo
cacheImportJobScalingNo
dbImportJobScalingNo
datafactoryReceiverScalingNo
flowhandlerScalingNo
genericReceiverScalingNo
httpReceiverScalingNo
importJobScalingNo
storeImportJobScalingNo

Each of the above parameters accepts an object:

{
scaleMinReplicas: int
scaleMaxReplicas: int
cpuResources: string
memoryResources: string
}
Parameter valueDescription
scaleMinReplicasThe lowest number of replicas the Container App will scale in to.
scaleMaxReplicasThe highest number of replicas the Container App will scale out to.
cpuResourcesThe amount of cpu resources to dedicate for the container resource. See here for allowed values.
memoryResourcesThe amount of memory resources to dedicate for the container resource. See here for allowed values.