全流程自动化部署指南(Push自动构建 → 测试通过自动建PR → Teams通知)
下面是面向测试小白的一步一步图文式操作指引,全程跟着点就能完成配置,最终实现:
本地
git push代码 → 云端自动跑Playwright测试 → 测试全部通过 → 自动创建合并请求(PR) → 推送消息到Teams频道通知审核人
前置准备(已完成可跳过)
- 代码已推送到Azure DevOps仓库,且有基础的流水线yml文件
- 已在Teams频道拿到Webhook通知链接
- 你拥有Azure DevOps项目的仓库管理员权限(用于配置权限)
整体自动化链路
本地push代码 → 自动触发流水线 → 执行Playwright测试
↓
测试成功 → 自动创建PR → 推送通知到Teams频道
↓
审核人点击Teams里的PR链接 → 完成代码合并
步骤1:给流水线开通「创建PR」的权限(必须先做)
流水线默认没有权限自动创建合并请求,不做这一步一定会失败。
- 打开Azure DevOps项目页面,点击左下角 Project settings(项目设置)
- 左侧菜单找到 Repos(仓库) 分类,点击 Repositories(仓库列表)
- 在中间列表选中你的代码仓库(比如
dropxl-automation-testing) - 页面右上角点击 Security(安全) 按钮
- 在搜索框输入
Build Service,找到带你项目名的账号(格式:[你的项目名] Build Service (组织名)) - 选中这个账号,在右侧权限列表把以下两项设为 Allow(允许) :
- Contribute(参与)
- Create pull request(创建拉取请求)
- 点击页面空白处自动保存。
步骤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的脚本里,加入审核人配置即可。
- 先获取审核人的Azure DevOps用户ID:
- 打开Azure DevOps,点击右上角人物图标 → 点击对方头像 → 地址栏里的
?subject=后面的一串ID就是用户ID
- 打开Azure DevOps,点击右上角人物图标 → 点击对方头像 → 地址栏里的
- 把下面的内容加到创建PR的JSON请求体里:
json
"reviewers": [
{ "id": "审核人1的用户ID" },
{ "id": "审核人2的用户ID" }
]
步骤6:完整测试验证流程
- 把修改好的
azure-pipelines.yml提交,git push到你的feature/xxx分支 - 回到Azure DevOps的Pipelines页面,会看到流水线自动启动
- 等待测试执行完成:
- 测试失败:不会创建PR,Teams会收到失败通知
- 测试成功:自动生成PR,Teams收到带PR链接的成功通知
- 打开Repos → Pull requests,能看到自动创建的PR,且已指派好审核人
小白常见踩坑排查
-
流水线没有自动启动?
检查
trigger里的分支是否包含你当前推送的分支,注意大小写。 -
创建PR步骤报错403无权限?
回到步骤1,确认给Build Service账号开了「Create pull request」权限。
-
每次push都新建一个PR?
脚本里已经加了判断逻辑,同一分支只会创建1个开放的PR,后续push只会更新代码,不会重复建PR。
-
Teams收不到通知?
确认Webhook链接正确配置在流水线Variables里,且Notify阶段的env里正确引用了变量。