GitHub Actions workflow_run触发器持续触发旧提交SHA,删文件仍运行如何解决?
解决workflow_run触发后检出错误提交的问题
一、修复workflow_run触发器的正确配置
如果坚持使用workflow_run触发镜像构建,需确保以下配置细节:
- 严格限定触发分支为
develop,且仅在CI工作流成功完成后触发 - checkout步骤必须指定
github.event.workflow_run.head_sha,同时设置完整克隆避免历史缺失 - 示例配置:
on: workflow_run: workflows: ["Frontend CI"] branches: [develop] types: - completed jobs: build-docker: if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: - name: 检出正确提交 uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 # 完整克隆仓库,避免浅克隆导致的提交匹配异常 # 后续Docker构建推送步骤
二、彻底清理旧缓存的工作流
GitHub的工作流缓存/历史运行可能导致旧配置持续执行,需手动处理:
- 进入仓库的Actions页面,找到旧的
web-image-develop.yml对应的工作流 - 点击右上角三个点,选择Disable workflow,彻底禁用旧工作流
- 可进一步删除该工作流的所有历史运行记录,避免误触发
三、更优替代方案:将Docker构建整合到原CI工作流
把镜像构建直接加入frontend-ci.yml,作为CI通过后的后续步骤,完全避免跨工作流的提交同步问题:
- 配置
needs依赖确保仅在所有CI任务通过后执行 - 分支判断限定仅在
develop分支运行 - 示例配置:
jobs: unit-tests: # 单元测试任务配置 type-check: # 类型检查任务配置 build: # 前端构建任务配置 deploy-develop-image: needs: [unit-tests, type-check, build] if: ${{ github.ref == 'refs/heads/develop' }} runs-on: ubuntu-latest steps: - name: 检出当前分支最新提交 uses: actions/checkout@v4 # Docker构建推送步骤
这种方案的优势是所有步骤共享同一个触发提交,完全不会出现提交不匹配的问题,逻辑更简洁可靠。
内容的提问来源于stack exchange,提问作者Burak İbrahim Ünal
相关产品推荐
相关产品推荐

