如何通过PowerShell触发Azure DevOps pipeline的CI/CD流程
PowerShell 触发 Azure DevOps Pipeline 实现方案
前置准备
- 提前申请Azure DevOps个人访问令牌(PAT):权限至少勾选Build (读取并执行),若触发的是YAML管道还需额外勾选*Pipeline (运行资源)*权限
- 记录3个核心信息:目标管道所属的DevOps组织名称、项目名称、管道定义ID(管道页面URL中
definitionId=后的数字即为ID) - 本地环境安装Windows PowerShell 5.1或PowerShell 7+版本
核心实现逻辑
通过调用Azure DevOps官方提供的Build REST接口完成触发,全程使用PowerShell内置的Invoke-RestMethod cmdlet发送请求,无需额外安装第三方模块。
详细操作步骤
步骤1:构造身份验证请求头
Azure DevOps REST接口采用Basic认证规则,将PAT作为密码、用户名字段留空,拼接后转Base64编码即可生成认证头,示例代码:
# 替换为你自己的PAT $pat = "你的Azure DevOps PAT" $headers = @{ Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) "Content-Type" = "application/json" }
步骤2:构造触发参数
可根据需求指定触发分支、自定义管道变量,请求体为JSON格式,示例:
# 替换为自己的组织名、项目名、管道ID $orgName = "你的组织名" $projectName = "你的项目名" $pipelineId = "你的管道定义ID" $requestBody = @{ definition = @{ id = $pipelineId } # 指定触发的分支,替换为你需要的分支名 sourceBranch = "refs/heads/main" # 可选:自定义管道变量,不需要可以删除该字段 parameters = @{ "env" = "test" "deploySwitch" = $true } | ConvertTo-Json } | ConvertTo-Json
步骤3:发送请求触发管道
调用POST接口完成触发,成功后会返回本次运行的详细信息:
$apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/build/builds?api-version=7.0" $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $requestBody # 打印触发后的运行ID和访问链接 Write-Host "管道触发成功,运行ID:$($response.id)" Write-Host "运行详情页地址:$($response._links.web.href)"
步骤4:(可选)查询运行状态
如果需要等待运行完成并获取结果,可通过返回的运行ID轮询查询:
$runId = $response.id do { Start-Sleep -Seconds 10 $runInfo = Invoke-RestMethod -Uri "https://dev.azure.com/$orgName/$projectName/_apis/build/builds/$runId?api-version=7.0" -Headers $headers Write-Host "当前运行状态:$($runInfo.status)" } while ($runInfo.status -eq "inProgress" -or $runInfo.status -eq "notStarted") Write-Host "运行最终结果:$($runInfo.result)"
注意事项
- PAT不要配置超出需要的权限,有效期按需设置,避免明文硬编码在脚本中,建议使用安全字符串或密钥管理工具存储
- 如果要覆盖管道中预设的变量,需要提前在管道设置中开启允许在队列时设置变量的开关
- 若管道配置了分支过滤,触发时传入的分支需要在过滤规则的允许范围内
内容的提问来源于stack exchange,提问作者sunil
相关产品推荐
相关产品推荐

