AWS CodeBuild合并Pull Request后未使用master分支最新提交问题
PULL_REQUEST_MERGED事件的默认逻辑
GitHub触发该事件时,默认传递给CodeBuild的是PR源分支(特性分支)的HEAD提交(也就是你例子里的E),而非合并后master分支的新提交F。这个事件的设计是关联PR的源分支提交,而非目标分支的合并结果,哪怕你配置了源版本为master,事件上下文还是绑定在PR的源分支上。事件触发的提交引用覆盖了预设配置
当通过GitHub事件触发CodeBuild时,事件携带的提交信息会直接覆盖你在项目里设置的“源版本为master”。简单说就是,PULL_REQUEST_MERGED事件会强制CodeBuild拉取PR源分支的最新提交,不会去拉取master当前的HEAD。Webhook payload解析优先级问题
GitHub发给CodeBuild的webhook payload里,包含了PR源分支的head.sha和合并提交的merge_commit_sha,但CodeBuild在处理PULL_REQUEST_MERGED事件时,可能优先使用了head.sha(特性分支的E),而非merge_commit_sha(master的F)。你可以去CodeBuild的构建日志里查看「Source version」字段,对比GitHub PR页面的合并提交ID,就能确认这一点。特殊合并方式的干扰(快进合并场景)
如果你的PR用了快进合并,master分支不会生成新的提交F,而是直接指向特性分支的E。这种情况下master的HEAD就是E,看起来像是CodeBuild用了错误的提交,但其实是合并方式导致的——不过你例子里提到master生成了F,这个情况可能不适用,但如果有偶尔出现类似问题的场景,也可以排查下合并方式。
内容的提问来源于stack exchange,提问作者Nitesh

