Skip to content

Commit a6f02a0

Browse files
authored
Enhance trigger management in deployment script
The code before the change only get the started trigger list after the deployment. As a result not all triggers get started according to their status before the deployment.
1 parent dda5d3f commit a6f02a0

File tree

1 file changed

+46
-7
lines changed

1 file changed

+46
-7
lines changed

SamplesV2/ContinuousIntegrationAndDelivery/PrePostDeploymentScript.Ver2.ps1

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,14 @@ try {
568568
$triggersDeployed = Get-SortedTrigger -DataFactoryName $DataFactoryName -ResourceGroupName $ResourceGroupName
569569

570570
if ($PreDeployment -eq $true) {
571+
572+
# New: Store the running triggers before stopping any trigger
573+
$triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq 'Started' } | ForEach-Object { $_.Name }
574+
# New: Persist to file (JSON) so that we can use this list to find the triggers need to be started during post-deployment (same job reuse)
575+
$triggersRunningJson = ($triggersRunning | ConvertTo-Json -Depth 10 -Compress)
576+
$stateFile = Join-Path $env:System_DefaultWorkingDirectory 'TriggersRunning.json'
577+
Set-Content -Path $stateFile -Value $triggersRunningJson -Encoding UTF8
578+
571579
#Stop trigger only if there is change in payload
572580
$triggersToStop = $triggersDeployed | Where-Object { $_.Name -in $triggerNamesInTemplate -and $_.RuntimeState -ne 'Stopped' } `
573581
| Where-Object {
@@ -724,8 +732,17 @@ try {
724732
}
725733

726734
#Start active triggers - after cleanup efforts
727-
$triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq 'Started' } | ForEach-Object { $_.Name }
728735

736+
# Read the file stored from pre-deployment script
737+
$stateFile = Join-Path $env:System_DefaultWorkingDirectory 'TriggersRunning.json'
738+
if (Test-Path $stateFile) {
739+
$triggersRunning = Get-Content $stateFile | ConvertFrom-Json
740+
Write-Host "Loaded triggers from file: $($triggersRunning -join ',')"
741+
} else {
742+
Write-Host "State file not found; fallback to original method to retrieve triggers in started status in template."
743+
$triggersRunning = $triggersDeployed | Where-Object { $_.RuntimeState -eq 'Started' } | ForEach-Object { $_.Name }
744+
}
745+
# Get updated trigger from template
729746
$updatedTriggersInTemplate = $triggersInTemplate
730747
if ($PSCompatible) {
731748
try {
@@ -739,13 +756,35 @@ try {
739756
}
740757
}
741758

742-
$triggersToStart = $updatedTriggersInTemplate | Where-Object { $_.properties.runtimeState -eq 'Started' -and $_.name.Substring(37, $_.name.Length - 40) -notin $triggersRunning } `
743-
| Where-Object { $_.properties.pipelines.Count -gt 0 -or $_.properties.pipeline.pipelineReference -ne $null } | ForEach-Object {
744-
New-Object PSObject -Property @{
745-
Name = $_.name.Substring(37, $_.name.Length - 40)
746-
TriggerType = $_.Properties.type
759+
# Build a unified set of trigger names: (Started in template) OR (previously running)
760+
# Force array materialization so + performs array concatenation, not string concatenation
761+
$triggerNamesFromTemplate = @(
762+
$updatedTriggersInTemplate |
763+
Where-Object { $_.properties.runtimeState -eq 'Started' } |
764+
ForEach-Object { $_.name.Substring(37, $_.name.Length - 40) }
765+
)
766+
767+
Write-Host "Trigger names from template with runtimeState 'Started': $($triggerNamesFromTemplate -join ',')"
768+
Write-Host "Triggers previously running before deployment: $($triggersRunning -join ',')"
769+
770+
$triggersRunning = @($triggersRunning) # ensure array even if single value
771+
$triggerNamesToStart = @($triggerNamesFromTemplate) + @($triggersRunning)
772+
$triggerNamesToStart = $triggerNamesToStart | Sort-Object -Unique
773+
774+
Write-Host "Final trigger names to start: $($triggerNamesToStart -join ',')"
775+
776+
$triggersToStart = $updatedTriggersInTemplate |
777+
Where-Object {
778+
$name = $_.name.Substring(37, $_.name.Length - 40)
779+
$name -in $triggerNamesToStart
780+
} |
781+
Where-Object { $_.properties.pipelines.Count -gt 0 -or $_.properties.pipeline.pipelineReference -ne $null } |
782+
ForEach-Object {
783+
New-Object PSObject -Property @{
784+
Name = $_.name.Substring(37, $_.name.Length - 40)
785+
TriggerType = $_.Properties.type
786+
}
747787
}
748-
}
749788

750789
if ($triggersToStart.Count -gt 0) {
751790
Write-Host "Starting $($triggersToStart.Count) triggers"

0 commit comments

Comments
 (0)