Azure Pipelines多阶段管道如何不重跑全流程用最新提交重跑失败阶段
多阶段流水线指定阶段拉取最新提交重跑解决方案
默认情况下CI/CD流水线首次触发时会拉取所有关联仓库的提交快照,后续重跑单个阶段时会复用该快照,不会主动拉取新的提交,这是重跑E2E阶段始终使用旧代码的核心原因。你可以通过以下几种方案实现不重跑全流水线,直接拉取最新E2E代码执行测试:
- 方案1:在E2E阶段增加动态拉取代码逻辑
无需改动流水线全局配置,直接在E2E阶段的执行脚本开头添加主动拉取最新E2E仓库代码的逻辑,跳过流水线默认的代码快照复用机制,示例脚本如下:
该方案适配所有CI/CD工具,改动量最小,调整后重跑E2E阶段会自动拉取最新代码执行。# 清理本地缓存的旧E2E测试代码 rm -rf ./e2e-test # 拉取E2E测试仓库指定分支的最新提交 git clone --depth=1 -b main <E2E测试仓库的内部地址> ./e2e-test cd ./e2e-test # 执行原有E2E测试命令 yarn test:e2e - 方案2:开启流水线重跑时的代码刷新配置
主流CI/CD工具均支持配置重跑阶段时重新拉取代码的能力:- Jenkins:重跑失败阶段时在弹窗中勾选
Refresh repository state before running,或在E2E阶段的checkout步骤中添加poll: true配置,强制每次执行该阶段都拉取最新代码。 - GitLab CI:在E2E任务的配置中新增变量
GIT_STRATEGY: clone,重跑时会重新克隆所有关联的代码仓库,若E2E仓库以子模块形式关联,额外添加GIT_SUBMODULE_STRATEGY: recursive配置即可。 - GitHub Actions:重跑失败任务时勾选
Re-run all jobs with latest commit选项,即可拉取E2E仓库的最新提交执行。
- Jenkins:重跑失败阶段时在弹窗中勾选
- 方案3:配置E2E仓库联动触发规则
给E2E测试仓库配置Webhook,当E2E代码合并到主分支时,自动触发对应已完成QA部署的流水线的E2E阶段执行,不需要手动重跑,自动传递最新的E2E提交ID到流水线。
注意:若你的测试仓库是通过依赖声明、版本锁的形式关联到主流水线,需要先解除对应版本锁定规则,才可拉取到最新提交。
内容的提问来源于stack exchange,提问作者hubesal
相关产品推荐
相关产品推荐

