GitHub定时Action推送子模块引用变更后,push触发的Action未执行
问题原因及解决办法
核心原因
GitHub Actions存在默认安全机制:由GitHub Actions工作流发起的push事件,不会触发其他工作流。这是为了避免出现无限循环的工作流执行(比如Workflow A触发Workflow B,Workflow B又触发Workflow A)。
你的第二个定时/手动Workflow在推送子模块引用变更到父仓库时,使用的是GitHub Actions默认的GITHUB_TOKEN进行推送,这种情况下GitHub会自动跳过后续的工作流触发,所以第一个监听push事件的Workflow不会运行。而你手动推送文件时,使用的是个人令牌或SSH密钥,不属于工作流发起的推送,因此能正常触发第一个Workflow。
解决办法
要让第二个Workflow推送后能触发第一个Workflow,需要在第二个Workflow的推送步骤中,使用**个人访问令牌(PAT)**替代默认的GITHUB_TOKEN:
- 在GitHub账户中创建一个具备
repo权限的个人访问令牌(PAT),并将其添加为父仓库的机密(例如命名为PUSH_TOKEN)。 - 修改第二个Workflow中的推送步骤,用这个PAT完成推送:
- name: Push submodule reference change run: | git config user.name "GitHub Actions" git config user.email "actions@github.com" git add .gitmodules git commit -m "Update submodule reference" git push https://${{ secrets.PUSH_TOKEN }}@github.com/你的用户名/父仓库名.git main
通过PAT发起的推送会被GitHub判定为普通用户的推送,进而正常触发第一个监听push事件的Workflow。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

