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

如何在GitHub中查看PR触发的Azure Pipeline运行状态?

解决方案:通过GitHub Workflow同步Azure Pipeline状态到GitHub PR

核心思路

利用GitHub Actions(Workflow)调用Azure DevOps REST API,获取PR触发的Azure Pipeline运行状态,直接在GitHub PR页面更新检查状态或添加评论,避免开发者跳转至Azure查看。

前置准备

  1. Azure DevOps 个人访问令牌(PAT):创建一个拥有Build (Read)权限的PAT,存储到GitHub仓库的Secrets中,命名为AZURE_DEVOPS_PAT。
  2. 关键参数收集:记录你的Azure DevOps组织名、项目名、目标Pipeline的ID,可分别存储为GitHub Secrets(如AZURE_ORG、AZURE_PROJECT、AZURE_PIPELINE_ID)或直接写入Workflow文件(敏感信息优先存Secrets)。

具体Workflow实现

创建.github/workflows/azure-pipeline-status.yml文件,内容如下:

name: Sync Azure Pipeline Status to PR
on:
  pull_request:
    branches: [ master ]
    types: [ opened, synchronize, reopened ]
  schedule:
    # 每5分钟轮询一次,确保状态实时更新(可选,根据需要调整)
    - cron: '*/5 * * * *'

jobs:
  check-azure-pipeline-status:
    runs-on: ubuntu-latest
    steps:
      - name: Get PR Number
        id: get-pr-number
        run: echo "pr_number=${{ github.event.number }}" >> $GITHUB_OUTPUT

      - name: Fetch Latest Azure Pipeline Build for PR
        id: fetch-build
        uses: fjogeleit/http-request-action@v1
        with:
          url: "https://dev.azure.com/${{ secrets.AZURE_ORG }}/${{ secrets.AZURE_PROJECT }}/_apis/build/builds?definitions=${{ secrets.AZURE_PIPELINE_ID }}&sourceBranch=refs/pull/${{ steps.get-pr-number.outputs.pr_number }}/merge&statusFilter=completed,inProgress&api-version=7.1-preview.7&$top=1"
          method: "GET"
          username: ""
          password: ${{ secrets.AZURE_DEVOPS_PAT }}
          customHeaders: '{"Content-Type": "application/json"}'

      - name: Parse Build Status
        id: parse-status
        run: |
          BUILD_DATA='${{ steps.fetch-build.outputs.response }}'
          BUILD_ID=$(echo "$BUILD_DATA" | jq -r '.value[0].id')
          BUILD_STATUS=$(echo "$BUILD_DATA" | jq -r '.value[0].status')
          BUILD_RESULT=$(echo "$BUILD_DATA" | jq -r '.value[0].result')
          
          # 映射Azure状态到GitHub检查状态
          if [ "$BUILD_STATUS" == "inProgress" ]; then
            GITHUB_STATUS="pending"
            DESCRIPTION="Azure Pipeline is running..."
          elif [ "$BUILD_STATUS" == "completed" ]; then
            if [ "$BUILD_RESULT" == "succeeded" ]; then
              GITHUB_STATUS="success"
              DESCRIPTION="Azure Pipeline passed ✅"
            else
              GITHUB_STATUS="failure"
              DESCRIPTION="Azure Pipeline failed ❌"
            fi
          else
            GITHUB_STATUS="neutral"
            DESCRIPTION="Azure Pipeline status unknown"
          fi
          
          echo "build_id=$BUILD_ID" >> $GITHUB_OUTPUT
          echo "github_status=$GITHUB_STATUS" >> $GITHUB_OUTPUT
          echo "description=$DESCRIPTION" >> $GITHUB_OUTPUT

      - name: Update GitHub PR Check Status
        uses: actions/github-script@v6
        with:
          script: |
            github.rest.checks.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              name: 'Azure Pipeline Validation',
              head_sha: context.payload.pull_request.head.sha,
              status: 'completed',
              conclusion: '${{ steps.parse-status.outputs.github_status }}',
              output: {
                title: 'Azure Pipeline Result',
                summary: '${{ steps.parse-status.outputs.description }}',
                text: 'Build ID: ${{ steps.parse-status.outputs.build_id }}'
              }
            })

关键细节说明

  • 触发时机:PR创建、同步、重开时立即触发,同时添加定时轮询确保状态更新(如果Azure Pipeline运行时间较长)。
  • API调用逻辑:通过Azure DevOps API筛选出当前PR对应的最新Pipeline运行,优先取inProgress或completed状态的实例。
  • 状态映射:将Azure的inProgress映射为GitHub的pending,completed/succeeded映射为success,其他失败状态映射为failure。
  • PR状态更新:通过GitHub API创建检查结果,直接显示在PR的「检查」标签页,开发者无需跳转即可看到验证结果。

可选优化

  • 添加PR评论:如果需要更显眼的提示,可以在Workflow中增加步骤,当Pipeline完成时向PR添加评论,告知结果。
  • 终止轮询:当Pipeline状态变为completed后,可停止后续轮询(可通过存储状态到GitHub缓存实现)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:01:15