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

如何使用PowerShell将Azure DevOps流水线移至/archived目录

程序化移动Azure DevOps流水线至/archived目录的PowerShell实现

要实现和手动操作等效的流水线移动,直接调用Azure DevOps REST API即可,以下是具体的PowerShell实现方案,可直接集成到你现有的仓库标记脚本中:

核心实现步骤

1. 配置基础参数

先定义Azure DevOps组织、项目、目标流水线ID以及有权限的个人访问令牌(PAT):

# 替换为你的实际信息
$orgUrl = "https://dev.azure.com/your-org-name"
$projectName = "your-project-name"
$pipelineId = 123 # 目标流水线的ID,可从流水线页面URL或API获取
$pat = "your-personal-access-token" # 需要拥有流水线编辑权限

2. 构造认证头

将PAT转换为API要求的Base64格式认证信息:

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))

3. 更新流水线目录

通过PUT请求修改流水线的folder属性为/archived(若该目录不存在,ADO会自动创建):

# 获取流水线当前信息(可选,用于验证)
$pipelineUrl = "$orgUrl/$projectName/_apis/pipelines/$pipelineId?api-version=7.1-preview.1"
$currentPipeline = Invoke-RestMethod -Uri $pipelineUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get

# 构造更新请求体
$updateBody = @{
    folder = "/archived"
} | ConvertTo-Json

# 发送更新请求
$updateUrl = "$orgUrl/$projectName/_apis/pipelines/$pipelineId?api-version=7.1-preview.1"
$updatedPipeline = Invoke-RestMethod -Uri $updateUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Body $updateBody -ContentType "application/json"

# 输出结果验证
Write-Host "流水线已成功移动至目录: $($updatedPipeline.folder)"

批量集成到现有脚本

如果要批量处理关联到已标记isdisabled仓库的流水线,可先通过API获取项目下所有流水线,筛选出关联目标仓库的条目,再批量执行移动操作:

# 获取项目下所有流水线
$allPipelinesUrl = "$orgUrl/$projectName/_apis/pipelines?api-version=7.1-preview.1"
$allPipelines = Invoke-RestMethod -Uri $allPipelinesUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get

# 筛选出关联到已禁用仓库的流水线(替换为你的仓库识别逻辑)
$targetPipelines = $allPipelines.value | Where-Object {
    $_.repository.id -eq "your-disabled-repo-id" -or $_.repository.name -eq "your-disabled-repo-name"
}

# 批量移动
foreach ($pipeline in $targetPipelines) {
    $updateBody = @{ folder = "/archived" } | ConvertTo-Json
    $updateUrl = "$orgUrl/$projectName/_apis/pipelines/$($pipeline.id)?api-version=7.1-preview.1"
    Invoke-RestMethod -Uri $updateUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Body $updateBody -ContentType "application/json"
    Write-Host "已移动流水线: $($pipeline.name) (ID: $($pipeline.id))"
}

注意事项

  • PAT权限:必须授予「流水线」权限组下的「编辑」权限
  • API版本:示例使用7.1-preview.1,可根据ADO版本调整为稳定版(如7.0)
  • 目录自动创建:若/archived目录不存在,ADO会在移动时自动生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:11