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

如何让Azure DevOps Pipeline后续步骤可访问前置步骤日志?

解决Azure DevOps流水线失败日志收集与AI分析的思路

1. 触发失败后的日志收集步骤

Azure DevOps流水线支持通过condition指定仅在前置步骤失败时执行后续任务,结合continueOnError确保流水线在步骤失败后仍能运行日志收集逻辑:

jobs:
- job: BuildAndAnalyze
  pool:
    vmImage: 'ubuntu-latest'
  steps:
    # 可能失败的核心构建步骤
    - script: |
        # 替换为你的构建命令,比如npm install、dotnet build等
        echo "模拟构建失败"
        exit 1
      displayName: "执行构建"
      continueOnError: true  # 允许步骤失败后继续执行后续任务

    # 仅在构建步骤失败时执行日志收集
    - script: |
        echo "开始收集失败日志"
        # 后续添加日志收集逻辑
      displayName: "收集失败日志"
      condition: failed()

2. 从代理本地目录提取任务日志

Azure DevOps代理会将每个任务的日志存储在代理工作目录的_diag子文件夹中,路径可通过$(Agent.WorkFolder)变量获取。你可以通过脚本筛选最近生成的日志文件(对应失败任务),并复制到工作目录供Python脚本读取:

Bash示例(Linux代理)

# 筛选最近修改的日志文件(对应最新执行的失败任务)
latest_log=$(ls -t $(Agent.WorkFolder)/_diag/*.log | head -1)
# 将日志复制到流水线工作目录
cp "$latest_log" "$(Build.SourcesDirectory)/failed_task.log"

PowerShell示例(Windows代理)

# 获取最新修改的日志文件
$latestLog = Get-ChildItem -Path "$(Agent.WorkFolder)/_diag/*.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
# 复制到工作目录
Copy-Item $latestLog.FullName -Destination "$(Build.SourcesDirectory)/failed_task.log"

3. 通过Azure DevOps REST API拉取完整日志

如果本地目录日志难以筛选,可调用Azure DevOps REST API获取当前流水线运行的完整日志。需要在Agent Job设置中开启Allow scripts to access the OAuth token,以使用内置的System.AccessToken进行身份验证:

# 获取当前流水线运行ID和项目信息
RUN_ID=$(System.RunId)
PROJECT_NAME=$(System.TeamProject)
ORG_NAME=$(System.CollectionUri | awk -F/ '{print $3}' | awk -F. '{print $1}')

# 调用API获取日志列表,提取最新任务日志的下载链接
LOG_URL=$(curl -s -H "Authorization: Bearer $(System.AccessToken)" \
  "https://dev.azure.com/$ORG_NAME/$PROJECT_NAME/_apis/build/builds/$RUN_ID/logs?api-version=7.1-preview.2" \
  | jq -r '.value[-1].url')

# 下载日志到工作目录
curl -s -H "Authorization: Bearer $(System.AccessToken)" "$LOG_URL" -o "$(Build.SourcesDirectory)/full_build_log.txt"

4. 集成Python脚本分析日志

收集到日志文件后,直接在后续步骤中调用Python脚本读取文件即可:

- script: |
    python analyze_logs.py "$(Build.SourcesDirectory)/failed_task.log"
  displayName: "AI分析失败日志"
  condition: failed()

你的Python脚本可直接通过文件路径读取日志内容,调用LLM进行分析后输出结果。

关键注意事项

  • 确保代理有$(Agent.WorkFolder)/_diag目录的读取权限
  • 使用REST API时,需确认System.AccessToken拥有**Build (Read)**权限
  • 若日志过大,可在收集时通过grep(Linux)或Select-String(Windows)筛选含错误关键词的内容,减少分析数据量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:10:09