全流程自动化部署指南(Push自动构建 → 测试通过自动建PR → Teams通知

全流程自动化部署指南(Push自动构建 → 测试通过自动建PR → Teams通知)

下面是面向测试小白的一步一步图文式操作指引,全程跟着点就能完成配置,最终实现:

本地 git push 代码 → 云端自动跑Playwright测试 → 测试全部通过 → 自动创建合并请求(PR) → 推送消息到Teams频道通知审核人


前置准备(已完成可跳过)

  1. 代码已推送到Azure DevOps仓库,且有基础的流水线yml文件
  2. 已在Teams频道拿到Webhook通知链接
  3. 你拥有Azure DevOps项目的仓库管理员权限(用于配置权限)

整体自动化链路

复制代码
本地push代码 → 自动触发流水线 → 执行Playwright测试
    ↓
测试成功 → 自动创建PR → 推送通知到Teams频道
    ↓
审核人点击Teams里的PR链接 → 完成代码合并

步骤1:给流水线开通「创建PR」的权限(必须先做)

流水线默认没有权限自动创建合并请求,不做这一步一定会失败。

  1. 打开Azure DevOps项目页面,点击左下角 Project settings(项目设置)
  2. 左侧菜单找到 Repos(仓库) 分类,点击 Repositories(仓库列表)
  3. 在中间列表选中你的代码仓库(比如 dropxl-automation-testing
  4. 页面右上角点击 Security(安全) 按钮
  5. 在搜索框输入 Build Service,找到带你项目名的账号(格式:[你的项目名] Build Service (组织名)
  6. 选中这个账号,在右侧权限列表把以下两项设为 Allow(允许)
    • Contribute(参与)
    • Create pull request(创建拉取请求)
  7. 点击页面空白处自动保存。

步骤2:开启「代码Push自动触发流水线」

修改你仓库里的 azure-pipelines.yml,把触发器改成下面的配置。

只要你往 feature/xxx 分支推送代码,云端就会自动启动流水线,不用手动点「运行」。

yaml 复制代码
# ========== 1. 自动触发规则 ==========
# push到以下分支时,自动启动流水线
trigger:
  branches:
    include:
      - main
      - develop
      - feature/*   # 所有feature开头的分支,push就自动跑

# 关闭PR自动触发(避免重复运行)
pr: none

# ========== 2. 定时任务(保留你原来的每日执行) ==========
schedules:
  - cron: "0 3 * * *"
    displayName: "Daily job for Production environment"
    branches:
      include: 
        - master 
    always: true

# ========== 3. 全局配置 ==========
pool:
  vmImage: 'ubuntu-latest'

parameters:
  - name: ENV_NAME
    displayName: "Select Environment"
    type: string
    default: prod
    values:      
      - prod
      - stage  

步骤3:添加「测试通过后自动创建PR」的脚本

在你的 Test 阶段最后面 (测试跑完、报告上传完之后),加入下面的步骤。

只有当前面所有测试都成功时,才会自动创建PR;测试失败则跳过,不会生成PR。

脚本功能说明

  • 自动识别当前运行的分支作为「源分支」
  • 默认合并目标是 develop 分支(可自行改成main)
  • 自动判断:该分支已有打开的PR时,不会重复创建
  • 创建成功后会输出PR链接,方便后续推送到Teams
yaml 复制代码
# 放在 Test 阶段的最后一个步骤
- bash: |
    # 配置参数:目标分支(要合并到哪个分支,自行修改)
    TARGET_BRANCH="develop"
    SOURCE_BRANCH=$(Build.SourceBranchName)
    PR_TITLE="Auto PR: $SOURCE_BRANCH -> $TARGET_BRANCH"
    PR_DESCRIPTION="✅ 自动化测试全部通过,自动创建合并请求\n源分支:$SOURCE_BRANCH\n目标分支:$TARGET_BRANCH\n构建号:$(Build.BuildNumber)"

    echo "检查当前分支是否已有打开的PR..."
    
    # 查询是否已有同分支的开放PR
    EXISTING_PR=$(curl -s -H "Authorization: Bearer $(System.AccessToken)" \
      "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.Name)/pullrequests?searchCriteria.sourceRefName=refs/heads/$SOURCE_BRANCH&searchCriteria.status=active&api-version=7.1-preview.1" \
      | jq '.count')

    if [ "$EXISTING_PR" -gt 0 ]; then
      echo "该分支已有开放的PR,跳过创建"
      PR_ID=$(curl -s -H "Authorization: Bearer $(System.AccessToken)" \
        "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.Name)/pullrequests?searchCriteria.sourceRefName=refs/heads/$SOURCE_BRANCH&searchCriteria.status=active&api-version=7.1-preview.1" \
        | jq '.value[0].pullRequestId')
      PR_URL="$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_git/$(Build.Repository.Name)/pullrequest/$PR_ID"
    else
      echo "没有找到现有PR,开始创建新PR..."
      
      # 调用API创建PR
      PR_RESPONSE=$(curl -s -X POST \
        -H "Authorization: Bearer $(System.AccessToken)" \
        -H "Content-Type: application/json" \
        -d "{
          \"sourceRefName\": \"refs/heads/$SOURCE_BRANCH\",
          \"targetRefName\": \"refs/heads/$TARGET_BRANCH\",
          \"title\": \"$PR_TITLE\",
          \"description\": \"$PR_DESCRIPTION\"
        }" \
        "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.Name)/pullrequests?api-version=7.1-preview.1")

      PR_ID=$(echo $PR_RESPONSE | jq '.pullRequestId')
      PR_URL="$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_git/$(Build.Repository.Name)/pullrequest/$PR_ID"
      echo "✅ PR创建成功,ID: $PR_ID"
    fi

    # 把PR链接存为变量,传给后面的Teams通知阶段
    echo "##vso[task.setvariable variable=PR_URL;isOutput=true]$PR_URL"
    echo "PR链接: $PR_URL"

  displayName: "✅ 测试通过 → 自动创建PR"
  name: CreateAutoPR
  # 只有前面所有步骤都成功,才执行创建PR
  condition: succeeded()

步骤4:配置Teams自动通知(带PR链接)

修改你原来的 Notify 阶段,把PR链接加到通知卡片里,审核人在Teams里点一下就能直接跳转到PR页面审核。

先修正跨阶段变量传递

Notify 阶段的变量区,接收上面步骤输出的PR链接:

yaml 复制代码
- stage: Notify
  dependsOn: 
    - Test
    - Performance_Metrics
  variables:
    BUILD_RESULT: $[ stageDependencies.Test.RunTests.result ]
    # 接收Test阶段输出的PR链接
    PR_URL: $[ stageDependencies.Test.RunTests.outputs['CreateAutoPR.PR_URL'] ]

然后修改Teams卡片,加入PR按钮

actions 数组里新增一个PR跳转按钮:

json 复制代码
{
  "type": "Action.OpenUrl",
  "title": "🔍 查看自动创建的PR",
  "url": "$PR_URL"
}

步骤5:指定PR审核人(可选,推荐配置)

如果需要自动把PR指派给特定同事审核,在创建PR的脚本里,加入审核人配置即可。

  1. 先获取审核人的Azure DevOps用户ID:
    • 打开Azure DevOps,点击右上角人物图标 → 点击对方头像 → 地址栏里的 ?subject= 后面的一串ID就是用户ID
  2. 把下面的内容加到创建PR的JSON请求体里:
json 复制代码
"reviewers": [
  { "id": "审核人1的用户ID" },
  { "id": "审核人2的用户ID" }
]

步骤6:完整测试验证流程

  1. 把修改好的 azure-pipelines.yml 提交,git push 到你的 feature/xxx 分支
  2. 回到Azure DevOps的Pipelines页面,会看到流水线自动启动
  3. 等待测试执行完成:
    • 测试失败:不会创建PR,Teams会收到失败通知
    • 测试成功:自动生成PR,Teams收到带PR链接的成功通知
  4. 打开Repos → Pull requests,能看到自动创建的PR,且已指派好审核人

小白常见踩坑排查

  1. 流水线没有自动启动?

    检查 trigger 里的分支是否包含你当前推送的分支,注意大小写。

  2. 创建PR步骤报错403无权限?

    回到步骤1,确认给Build Service账号开了「Create pull request」权限。

  3. 每次push都新建一个PR?

    脚本里已经加了判断逻辑,同一分支只会创建1个开放的PR,后续push只会更新代码,不会重复建PR。

  4. Teams收不到通知?

    确认Webhook链接正确配置在流水线Variables里,且Notify阶段的env里正确引用了变量。

相关推荐
梦想的旅途21 小时前
企业微信API实战:Python自动化消息推送
java·前端·python·自动化·企业微信
難釋懷1 小时前
Nginx重试机制
运维·nginx
爱喝水的鱼丶11 小时前
SAP-ABAP:接口与报表场景专项优化:RFC/ODATA 接口、ALV 报表的性能提升方案
运维·性能优化·接口·sap·abap·rfc·经验交流
画中有画12 小时前
自动化脚本开发最佳实践
运维·自动化
m0_5257247214 小时前
Jenkins共享库目录规范解析
自动化
江南风月14 小时前
如何使用WGCLOUD实现智能运维
运维·zabbix·运维开发·prometheus
xiaoxiangsiyan15 小时前
HCIA 网络技术基础核心模块详解
运维·网络·网络协议·tcp/ip·运维开发·网络基础
llgdwuhan15 小时前
CPO 架构革新撕开设备缺口:测试 + 耦合双赛道,国产迎来黄金窗口期
自动化·光模块·耦合测试设备·光模块耦合设备·芯片测试设备
MuMuMu122316 小时前
工业园区 VOCs 绿岛集中治理:越华环保集团项目技术方案与工程实践
大数据·运维