You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell脚本触发Azure DevOps CI/CD流水线

Azure DevOps 用PowerShell触发CI/CD流水线完整实现方案

前置配置要求

  • 权限要求:操作账号至少具备对应项目的构建管理员或流水线参与者角色
  • 个人访问令牌(PAT):提前在Azure DevOps个人设置中生成PAT,权限范围至少勾选Build (Read & execute),如需触开发布流水线还需额外勾选Release (Read, write, & execute),PAT生成后仅显示一次请妥善保存
  • 运行环境:支持PowerShell 5.1及以上版本,无需额外安装第三方模块
  • 必备参数:提前确认三个核心信息——Azure DevOps组织名、项目名、待触发的流水线ID(可在流水线页面URL的pipelineId参数中获取)

完整操作步骤

步骤1:确认核心参数值

  • 组织名:Azure DevOps域名前缀,例如https://dev.azure.com/xxx中的xxx即为组织名
  • 项目名:对应项目的准确名称,大小写需和系统配置完全匹配
  • 流水线ID:打开待触发的流水线页面,地址栏中pipelineId=后的数字即为流水线ID

步骤2:编写PowerShell触发脚本

触发CI构建流水线脚本

# 替换为实际配置值
$orgName = "你的组织名"
$projectName = "你的项目名"
$pipelineId = "你的构建流水线ID"
$pat = "你的PAT令牌"

# 生成认证头
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$header = @{Authorization = ("Basic {0}" -f $base64AuthInfo) }

# 构造请求体,不需要自定义参数可删除parameters字段
$body = @{
    resources = @{
        repositories = @{
            self = @{}
        }
    }
    parameters = "{""自定义参数1"":""参数值1"",""自定义参数2"":""参数值2""}"
} | ConvertTo-Json

# 调用API触发流水线
$apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/pipelines/$pipelineId/runs?api-version=7.1-preview.1"

try {
    $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $header -Body $body -ContentType "application/json"
    Write-Host "构建流水线触发成功,运行ID:$($response.id),运行页面地址:$($response._links.web.href)"
}
catch {
    Write-Host "触发失败,错误码:$($_.Exception.Response.StatusCode.value__),错误信息:$($_.ErrorDetails.Message)"
}

触发CD发布流水线脚本

# 替换为实际配置值
$orgName = "你的组织名"
$projectName = "你的项目名"
$releasePipelineId = "你的发布流水线ID"
$pat = "你的PAT令牌"

# 生成认证头
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$header = @{Authorization = ("Basic {0}" -f $base64AuthInfo) }

# 构造请求体,不需要关联制品或自定义变量可删除对应字段
$body = @{
    definitionId = $releasePipelineId
    variables = @{
        发布变量1 = @{ value = "变量值1" }
        发布变量2 = @{ value = "变量值2" }
    }
    artifacts = @(
        @{
            alias = "发布流水线中配置的构建制品别名"
            instanceReference = @{
                id = "对应构建运行的ID"
                name = "对应构建的版本号"
            }
        }
    )
} | ConvertTo-Json -Depth 10

# 调用API触发发布
$apiUrl = "https://vsrm.dev.azure.com/$orgName/$projectName/_apis/release/releases?api-version=7.1-preview.8"

try {
    $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $header -Body $body -ContentType "application/json"
    Write-Host "发布流水线触发成功,发布ID:$($response.id),发布页面地址:$($response._links.web.href)"
}
catch {
    Write-Host "触发失败,错误码:$($_.Exception.Response.StatusCode.value__),错误信息:$($_.ErrorDetails.Message)"
}

步骤3:执行验证

替换脚本中的所有占位参数后,直接在PowerShell终端运行脚本即可,返回成功信息后可到Azure DevOps流水线页面核对运行记录。

安全注意事项

  • 禁止将PAT明文硬编码在脚本中,生产环境建议通过环境变量、密钥管理工具存储PAT,避免权限泄露
  • PAT权限需遵循最小够用原则,仅勾选需要的流水线操作权限即可,不要开启全范围权限

常见问题处理

  • 报错403权限不足:检查PAT是否过期、权限范围是否符合要求,以及对应账号是否有目标流水线的执行权限
  • 报错404资源不存在:核对组织名、项目名、流水线ID的拼写和大小写是否和系统配置一致,确认项目权限是否开放给当前账号
  • 自定义参数不生效:检查流水线配置中是否开启了仅在队列时允许重写参数的开关,未开启的情况下脚本传入的自定义参数会被忽略
  • 脚本执行提示网络错误:检查运行环境是否能正常访问Azure DevOps域名,是否有代理、防火墙拦截请求
  • 发布流水线触发后制品不匹配:检查请求体中artifacts的alias是否和发布流水线中配置的制品别名完全一致,关联的构建ID是否为已完成的有效构建ID

内容的提问来源于stack exchange,提问作者kiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:36:00