如何在GitHub中查看PR触发的Azure Pipeline运行状态?
解决方案:通过GitHub Workflow同步Azure Pipeline状态到GitHub PR
核心思路
利用GitHub Actions(Workflow)调用Azure DevOps REST API,获取PR触发的Azure Pipeline运行状态,直接在GitHub PR页面更新检查状态或添加评论,避免开发者跳转至Azure查看。
前置准备
- Azure DevOps 个人访问令牌(PAT):创建一个拥有
Build (Read)权限的PAT,存储到GitHub仓库的Secrets中,命名为AZURE_DEVOPS_PAT。 - 关键参数收集:记录你的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
相关产品推荐
相关产品推荐

