GitHub Actions工作流分支推送时重复重启问题求助
GitHub Actions工作流无限循环问题排查与解决
核心原因分析
这种无限循环最常见的触发点是部署过程中向触发工作流的分支推送了代码——比如服务器端存在自动同步脚本、钩子,或者部署工具不小心修改并提交了仓库内容,导致GitHub检测到新推送,再次触发工作流,形成闭环。
具体解决步骤
1. 排查服务器端操作
- 确认
ssh-scp-deploy仅执行文件复制,没有在目标服务器上运行git commit、git push等操作 - 检查服务器目标目录是否为Git仓库,是否存在post-receive等钩子脚本,避免这些脚本向触发分支推送代码
2. 限制工作流触发条件
在工作流的触发配置中,添加过滤规则,排除由GitHub Actions自身触发的推送:
on: push: branches: [ 你的分支名 ] jobs: deploy: # 跳过由GitHub Actions机器人发起的推送 if: github.actor != 'github-actions[bot]' steps: - name: 🚚 Get latest code uses: actions/checkout@v3 - name: 📂 Deploy to Stage uses: nogsantos/ssh-scp-deploy@v1.3.0 with: src: ./* host: ${{ secrets.HOST }} remote: ${{ secrets.SSH_STAGE_DIR }} port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_ROOT_USER }} key: ${{ secrets.SSH_KEY_PRIVATE }}
如果工作流文件的修改不需要触发部署,也可以添加路径忽略:
on: push: branches: [ 你的分支名 ] paths-ignore: - '.github/workflows/**'
3. 优化部署文件范围
当前src: ./*会包含.git目录,如果目标服务器目录是Git仓库,复制.git文件可能引发服务器端的Git状态变化,进而触发钩子。建议缩小部署范围,排除不必要的文件:
- name: 📂 Deploy to Stage uses: nogsantos/ssh-scp-deploy@v1.3.0 with: src: | ./src/** ./public/** ./package.json !./.git/** !./node_modules/** # 其他配置不变
4. 检查checkout步骤的行为
确认actions/checkout@v3没有在本地修改仓库内容并意外提交——比如部署前的构建步骤如果生成了文件,不要将这些文件推回仓库。
内容的提问来源于stack exchange,提问作者DanielMotahari
相关产品推荐
相关产品推荐

