-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathTrigger-ADF-Pipeline.ps1
111 lines (93 loc) · 4.31 KB
/
Trigger-ADF-Pipeline.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Import the required module for PowerShell
Import-Module Az.DataFactory
# Path to the configuration file
$configFilePath = "adf_config.json"
# Read the configuration file
if (-not (Test-Path $configFilePath)) {
Write-Host "Configuration file not found: $configFilePath"
exit 1
}
$config = Get-Content -Path $configFilePath | ConvertFrom-Json
# Extract the ADF instance name, resource group name, and subscription ID from the config
$adfInstanceName = $config.ADFInstanceName
$resourceGroupName = $config.ResourceGroupName
$subscriptionId = $config.SubscriptionId
# Define the names of the ADF pipelines to trigger
$firstPipelineName = "Power BI Monitoring Master Pipeline" # Replace with your actual first pipeline name
$secondPipelineName = "Load Power BI API Activity Events 30days" # Replace with your actual second pipeline name
# Set the Azure subscription context
az account set --subscription $subscriptionId
# Function to get the access token
function Get-AccessToken {
$tokenResponse = az account get-access-token --resource https://management.azure.com/ --query accessToken -o tsv
return $tokenResponse
}
# Function to check pipeline run status using REST API
function Get-PipelineRunStatus {
param (
[string]$resourceGroupName,
[string]$adfInstanceName,
[string]$pipelineRunId
)
$accessToken = Get-AccessToken
$url = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DataFactory/factories/$adfInstanceName/pipelineruns/$pipelineRunId`?api-version=2018-06-01"
$response = Invoke-RestMethod -Uri $url -Method Get -Headers @{Authorization = "Bearer $accessToken"}
return $response.status
}
# Function to trigger a pipeline using REST API
function Trigger-Pipeline {
param (
[string]$resourceGroupName,
[string]$adfInstanceName,
[string]$pipelineName
)
$accessToken = Get-AccessToken
$url = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DataFactory/factories/$adfInstanceName/pipelines/$pipelineName/createRun?api-version=2018-06-01"
$response = Invoke-RestMethod -Uri $url -Method Post -Headers @{Authorization = "Bearer $accessToken"}
return $response.runId
}
# Trigger the first ADF pipeline
Write-Host "Triggering ADF pipeline '$firstPipelineName' in instance '$adfInstanceName'..."
$firstPipelineRunId = Trigger-Pipeline -resourceGroupName $resourceGroupName -adfInstanceName $adfInstanceName -pipelineName $firstPipelineName
if (-not $firstPipelineRunId) {
Write-Host "Failed to initiate first pipeline run."
exit 1
}
Write-Host "First pipeline run initiated successfully. Run ID: $firstPipelineRunId"
# Wait for the first pipeline run to finish
while ($true) {
$status = Get-PipelineRunStatus -resourceGroupName $resourceGroupName -adfInstanceName $adfInstanceName -pipelineRunId $firstPipelineRunId
Write-Host "First pipeline run status: $status"
if ($status -eq "Succeeded") {
Write-Host "First pipeline run succeeded."
break
} elseif ($status -eq "Failed" -or $status -eq "Cancelled") {
Write-Host "First pipeline run failed or was cancelled."
exit 1
} else {
Start-Sleep -Seconds 30
}
}
# Trigger the second ADF pipeline
Write-Host "Triggering ADF pipeline '$secondPipelineName' in instance '$adfInstanceName'..."
$secondPipelineRunId = Trigger-Pipeline -resourceGroupName $resourceGroupName -adfInstanceName $adfInstanceName -pipelineName $secondPipelineName
if (-not $secondPipelineRunId) {
Write-Host "Failed to initiate second pipeline run."
exit 1
}
Write-Host "Second pipeline run initiated successfully. Run ID: $secondPipelineRunId"
# Wait for the second pipeline run to finish
while ($true) {
$status = Get-PipelineRunStatus -resourceGroupName $resourceGroupName -adfInstanceName $adfInstanceName -pipelineRunId $secondPipelineRunId
Write-Host "Second pipeline run status: $status"
if ($status -eq "Succeeded") {
Write-Host "Second pipeline run succeeded."
break
} elseif ($status -eq "Failed" -or $status -eq "Cancelled") {
Write-Host "Second pipeline run failed or was cancelled."
exit 1
} else {
Start-Sleep -Seconds 30
}
}
Write-Host "Both pipeline runs completed successfully."