如何使用Github Actions执行npm version推送并解决用户名读取报错
问题根因
本次报错是Git推送时认证规则未生效导致,核心原因有两个:
- 你配置的
git insteadOf规则仅替换ssh://git@github.com/开头的SSH协议地址,而当前工作流拉取仓库用的是HTTPS协议的远程地址,规则未匹配生效,推送时使用的还是未携带认证信息的原始HTTPS地址,触发身份校验。你设置的用户名和令牌仅绑定在SSH转HTTPS的规则里,没有覆盖到实际使用的HTTPS地址,所以系统无法识别到对应的认证信息。 - 你在
actions/checkout步骤设置了persist-credentials: false,清空了GitHub Workflow默认提供的GITHUB_TOKEN凭据,也没有额外给HTTPS地址配置认证信息,进一步导致身份校验失败。
修复方案
1. 调整Git替换规则覆盖HTTPS地址
将原来的认证配置步骤修改为替换所有GitHub的HTTPS请求,直接给所有HTTPS地址自动带上认证信息:
- name: Reconfigure git to use HTTP authentication run: > git config --global url."https://my-user:${{ secrets.USER_TOKEN }}@github.com/".insteadOf https://github.com/
修改后所有访问GitHub的HTTPS请求都会自动携带你配置的用户名和令牌,不需要额外输入认证信息。
2. 可选:直接修改当前仓库远程地址
你也可以直接给当前仓库设置带认证的远程地址,避免全局配置可能的遗漏:
- name: Set authenticated remote URL run: git remote set-url origin https://my-user:${{ secrets.USER_TOKEN }}@github.com/${{ github.repository }}.git
额外需要修正的配置问题
你当前的工作流还存在一个不影响本次报错,但会导致后续运行异常的配置:
策略矩阵中定义的Node版本变量名为node,但actions/setup-node步骤引用的是${{ matrix.node-version }},变量名不匹配,需要统一修改:
# 方案A:修改矩阵变量名 strategy: matrix: os: [ ubuntu-latest ] node-version: [ 16 ] # 方案B:修改setup-node的变量引用 - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} cache: 'npm'
另外建议在推送步骤明确指定推送分支和同步标签,避免默认推送规则不匹配:
- name: Push version change run: | git show git push origin HEAD:${{ github.ref_name }} --follow-tags
前置校验
请提前确认你仓库的Secrets配置中确实存在名为USER_TOKEN的密钥,且该令牌拥有对应仓库的读写权限。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

