返回 Skill 列表
extension
分类: 开发与工程无需 API Key

bulk-operations

高效地一次性更新多个Azure DevOps工作项。当用户想要更新许多工作项、批量状态更改、大量更新、批处理操作或循环更新工作项时使用。当用户提到“批量”、“批处理”、“多个项目”、“所有任务”、“更新几个”或“大量更新”时使用。

person作者: jakexiaohubgithub

Bulk Operations Reference (Verified)

Performance Insight

Direct bash for loops are approximately 10x faster than sub-agents for bulk operations.

This is because:

  1. No agent spawning overhead
  2. Direct CLI execution
  3. Can use -o none to skip JSON parsing

Recommended Patterns

Fast Bulk State Update

# Update multiple work items to same state
for id in 1858 1859 1860; do
  az boards work-item update --id $id --state "Done" -o none && echo "Updated $id"
done

Update from Query Results

# Query IDs then update each
ids=$(az boards query --wiql "SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active' AND [System.TeamProject] = 'ProjectName'" -o tsv | cut -f1)

for id in $ids; do
  az boards work-item update --id $id --state "Resolved" -o none && echo "Updated $id"
done

Bulk Assignment

for id in 1001 1002 1003; do
  az boards work-item update --id $id --assigned-to "user@domain.com" -o none && echo "Assigned $id"
done

Bulk Field Update

for id in 1001 1002 1003; do
  az boards work-item update --id $id --fields "Microsoft.VSTS.Common.Priority=1" -o none && echo "Updated priority for $id"
done

Bulk Add Discussion Comment

for id in 1001 1002 1003; do
  az boards work-item update --id $id --discussion "Reviewed in sprint planning" -o none && echo "Commented on $id"
done

Output Optimization

Use -o none to suppress JSON output when you don't need the response:

# With output (slower)
az boards work-item update --id 1234 --state "Done" -o json

# Without output (faster)
az boards work-item update --id 1234 --state "Done" -o none

Error Handling

Continue on Error

for id in 1001 1002 1003; do
  az boards work-item update --id $id --state "Done" -o none 2>/dev/null && echo "OK: $id" || echo "FAIL: $id"
done

Stop on First Error

for id in 1001 1002 1003; do
  az boards work-item update --id $id --state "Done" -o none || { echo "Failed on $id"; break; }
  echo "Updated $id"
done

Collect Failures

failed_ids=""
for id in 1001 1002 1003; do
  if ! az boards work-item update --id $id --state "Done" -o none 2>/dev/null; then
    failed_ids="$failed_ids $id"
  fi
done
[ -n "$failed_ids" ] && echo "Failed IDs:$failed_ids"

Counting Operations

Quick Count from Query

az boards query --wiql "SELECT [System.Id] FROM WorkItems WHERE ..." --output table | tail -n +3 | wc -l

Note: tail -n +3 skips the header rows in table output.

Count Before Bulk Update

count=$(az boards query --wiql "SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active' AND [System.TeamProject] = 'ProjectName'" -o tsv | wc -l)
echo "Will update $count items"

Anti-Patterns to Avoid

Don't Use Sub-Agents for Bulk Ops

# SLOW - spawns sub-agent for each item
# Avoid patterns that create new agent instances per item

Don't Parse Full JSON for Each Update

# SLOW - full JSON parsing with extra extraction
for id in 1001 1002 1003; do
  az boards work-item update --id $id --state "Done" --query "id" -o tsv  # Unnecessary if you already know the ID
done

# FAST - suppress output
for id in 1001 1002 1003; do
  az boards work-item update --id $id --state "Done" -o none && echo "Updated $id"
done

Parallel Execution (Advanced)

For very large batches, consider parallel execution with background jobs:

# Run updates in parallel (use with caution - may hit rate limits)
for id in 1001 1002 1003 1004 1005; do
  az boards work-item update --id $id --state "Done" -o none &
done
wait
echo "All updates complete"

Caution: Parallel execution may hit Azure DevOps API rate limits. Use sparingly.

Typical Use Cases

  1. Sprint Cleanup - Move all remaining items to next sprint
  2. Bulk Close - Close all resolved items at end of sprint
  3. Mass Reassignment - Reassign items when team member leaves
  4. Priority Reset - Update priorities after planning session
  5. Tag Application - Add tags to multiple related items