Azure Pipeline CI编译未同步HTML更新、构建产物为旧版本问题
Azure Pipeline 构建始终拉取旧版本代码排查方案
按优先级从高到低依次排查,每一步验证通过后再往下走:
- 先验证代码提交是否真的到了目标分支
直接在代码托管平台的网页端,打开Pipeline配置拉取的对应分支,找到你修改的HTML文件,确认网页端展示的内容是你修改后的最新版本,核对最新commit hash。如果网页端都看不到修改,说明你本地提交未推送、PR未完成合并、或者被分支策略拦截,和Pipeline无关。 - 核对Checkout步骤的拉取配置
打开任意一次异常构建的日志,定位到Checkout任务节点:- 确认拉取的仓库地址、分支名和你提交修改的仓库、分支完全一致,排除连错同名仓库、fork仓库的问题
- 对比日志里打印的拉取到的最新commit hash,和代码平台上目标分支的最新hash是否一致
- 给Checkout任务开启全量清理配置:设置
clean: true,清理选项选sources,如果是自托管代理直接选all directories,避免代理工作区残留旧文件
- 排除构建缓存和文件拷贝配置问题
- 临时禁用Pipeline里配置的所有缓存任务(包括NuGet缓存、npm缓存、MSBuild输出缓存、Pipeline通用缓存任务)
- 在Checkout步骤之后、构建步骤之前,加一个命令行任务执行
git clean -fdx,强制清空工作区所有未跟踪文件、中间生成文件 - 打开项目的
.csproj文件,找到你修改的HTML文件的配置项,确认CopyToOutputDirectory节点值不是Never,静态文件要设置为PreserveNewest或者Always才会被拷贝到构建输出目录
- 核对Artifact发布环节的路径配置
打开构建日志里的Publish Artifact任务节点,查看任务实际扫描、拷贝的源文件路径:- 确认待发布路径指向的是本次构建的工作区输出目录,不是代理机器上的固定静态目录、其他管线的输出目录
- 在日志里找到你修改的HTML文件的拷贝记录,核对文件的修改时间、大小,和代码库中的最新文件一致
- 构建完成后直接下载生成的artifact包,解压后全局搜索你修改的字段名,确认包内的HTML文件是最新版本,排除存在多个同名HTML文件(比如Razor类库内嵌的静态文件优先级高于主项目文件)导致的加载旧文件问题
- 自托管代理专项排查
如果你用的不是微软托管代理,是自己部署的自托管代理:- 登录代理机器,手动删除代理安装目录下
_work文件夹中对应管线的所有工作目录内容,排除旧文件残留 - 临时切换到微软托管代理跑一次构建,如果切换后构建正常,说明是自托管代理的工作区权限、磁盘残留、配置异常导致的问题
- 登录代理机器,手动删除代理安装目录下
注意:如果其他同配置管线运行正常,不需要重建管线,90%以上的此类问题都是拉取分支不匹配、自托管代理残留、发布路径配错这三个原因导致的。
内容的提问来源于stack exchange,提问作者Nacho
相关产品推荐
相关产品推荐

