...
1<#
2.SYNOPSIS
3Queues an Azure DevOps Pipeline run optionally canceling similar runs
4
5.PARAMETER Organization
6Azure DevOps organization name
7
8.PARAMETER Project
9Azure DevOps project name
10
11.PARAMETER SourceBranch
12Source branch use when executing the DevOps pipeline. Specifying an empty string
13will result in queuing of the run with the default branch configured for the
14pipeline.
15
16.PARAMETER DefinitionId
17Pipline definition ID
18
19.PARAMETER CancelPreviousBuilds
20Requires a value for SourceBranch. Cancel previous builds before queuing the new
21build.
22
23.PARAMETER VsoQueuedPipelines
24Variable name to set in DevOps for the queued pipeline links
25
26.PARAMETER Base64EncodedAuthToken
27Auth token for Azure DevOps API
28
29.PARAMETER BuildParametersJson
30Additional build parameters to provide to the pipeline execution.
31
32Of the format:
33
34```json
35{
36 "variable1": "value1",
37 "variable2": "value2"
38}
39```
40
41#>
42
43[CmdletBinding(SupportsShouldProcess = $true)]
44param(
45 [Parameter(Mandatory = $true)]
46 [string]$Organization,
47
48 [Parameter(Mandatory = $true)]
49 [string]$Project,
50
51 [string]$SourceBranch,
52
53 [Parameter(Mandatory = $true)]
54 [int]$DefinitionId,
55
56 [boolean]$CancelPreviousBuilds=$false,
57
58 [Parameter(Mandatory = $false)]
59 [string]$VsoQueuedPipelines,
60
61 [Parameter(Mandatory = $true)]
62 [string]$Base64EncodedAuthToken,
63
64 [Parameter(Mandatory = $false)]
65 [string]$BuildParametersJson
66)
67
68. (Join-Path $PSScriptRoot common.ps1)
69
70# Skip if SourceBranch is empty because it we cannot generate a target branch
71# name from an empty string.
72if ($CancelPreviousBuilds -and $SourceBranch)
73{
74 try {
75 $queuedBuilds = Get-DevOpsBuilds -BranchName "refs/heads/$SourceBranch" -Definitions $DefinitionId `
76 -StatusFilter "inProgress, notStarted" -Base64EncodedAuthToken $Base64EncodedAuthToken
77
78 if ($queuedBuilds.count -eq 0) {
79 LogDebug "There is no previous build still inprogress or about to start."
80 }
81
82 foreach ($build in $queuedBuilds.Value) {
83 $buildID = $build.id
84 LogDebug "Canceling build [ $($build._links.web.href) ]"
85 Update-DevOpsBuild -BuildId $buildID -Status "cancelling" -Base64EncodedAuthToken $Base64EncodedAuthToken
86 }
87 }
88 catch {
89 LogError "Call to DevOps API failed with exception:`n$_"
90 exit 1
91 }
92}
93
94try {
95 $resp = Start-DevOpsBuild `
96 -Organization $Organization `
97 -Project $Project `
98 -SourceBranch $SourceBranch `
99 -DefinitionId $DefinitionId `
100 -Base64EncodedAuthToken $Base64EncodedAuthToken `
101 -BuildParametersJson $BuildParametersJson
102}
103catch {
104 LogError "Start-DevOpsBuild failed with exception:`n$_"
105 exit 1
106}
107
108LogDebug "Pipeline [ $($resp.definition.name) ] queued at [ $($resp._links.web.href) ]"
109
110if ($VsoQueuedPipelines) {
111 $enVarValue = [System.Environment]::GetEnvironmentVariable($VsoQueuedPipelines)
112 $QueuedPipelineLinks = if ($enVarValue) {
113 "$enVarValue<br>[$($resp.definition.name)]($($resp._links.web.href))"
114 }else {
115 "[$($resp.definition.name)]($($resp._links.web.href))"
116 }
117 $QueuedPipelineLinks
118 Write-Host "##vso[task.setvariable variable=$VsoQueuedPipelines]$QueuedPipelineLinks"
119}
View as plain text