You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

复用GitHub工作流时actions/create-github-app-token认证失败求助

问题:使用actions/create-github-app-token@v1推送代码时认证失败

工作流背景与执行步骤

当前工作流为被调用工作流,由子仓库触发调用,使用actions/create-github-app-token@v1生成令牌,执行步骤及耗时如下:

  1. 检出代码:1秒
  2. 设置Node.js:1秒
  3. 计算maxPatchPublishDate:2秒
  4. 调试maxPatchPublishDate:1秒
  5. 安装依赖:2秒
  6. 生成用于检出被调用工作流仓库的令牌:1秒
  7. 检出被调用工作流仓库:1秒
  8. 安装AZ模块:3分钟
  9. Azure登录:20秒
  10. PowerShell执行:1小时15分钟
  11. 检查CSV文件是否存在:1秒
  12. 安装GitHub CLI:1秒
  13. GitHub CLI认证:1秒
  14. 重新生成令牌:1秒
  15. 创建/更新文件、推送变更、创建PR、合并PR及删除分支:执行失败

出错的工作流代码

步骤14(重新生成令牌)和步骤15(推送变更)的代码如下:

- name: Re-generate the Token
    uses: actions/create-github-app-token@v1
    id: app-token
    with:
      app-id: ${{ secrets.APP_ID }}
      private-key: ${{ secrets.PRIVATE_KEY }}
      owner: ${{ github.repository_owner }}
      repositories: |
        automation-framework
    
  - name: Create or Update File AND Push Changes AND Create Pull Request AND Merge Pull Request AND Delete Branch
    run: |
      timestamp=$(date +%d-%m-%Y-%H-%M-%S)
      folder_path="Patching_reports/test/$timestamp"
      mkdir -p $folder_path
      mv /tmp/*.csv $folder_path/
    
      git config --global user.name "automation-app[bot]"
      git config --global user.email "automation-app[bot]@users.noreply.github.com"
    
      git add $folder_path
      git commit -m "suhas-Add patching reports generated on $timestamp"
      GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/xxxxxxx/automation-framework.git || echo "Nothing to push

错误信息

执行步骤15时出现认证失败,错误日志如下:

remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/xxxxxxx/automation-framework.git/'
Nothing to push
##[debug]Finishing: Create or Update File AND Push Changes AND Create Pull Request AND Merge Pull Request AND Delete Branch

排查与解决方案

1. 确认GitHub App的权限配置

  • 登录GitHub找到对应App,进入「Permissions & events」页面,将「Repository permissions」下的「Contents」权限设置为Read and write,确保App拥有推送代码、修改文件的权限。
  • 同时确认该App已被安装到目标仓库automation-framework中。

2. 验证令牌的仓库范围

  • 检查步骤14中repositories参数的仓库名称拼写,GitHub仓库名称大小写敏感,需与实际仓库名称完全一致。
  • 可添加调试步骤确认令牌生成的仓库范围:
    - name: Debug Token Repository Scope
      run: echo "Token repo scope: ${{ steps.app-token.outputs.repository }}"
    

3. 修正git push的URL与分支指定

  • 确认URL中的组织/用户名xxxxxxx拼写正确,避免路径错误。
  • git push时明确指定目标分支(如main),避免分支匹配问题:
    git push https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/xxxxxxx/automation-framework.git HEAD:main
    

4. 调整git配置级别

  • 不要使用git config --global修改用户信息,改用仓库级配置,避免与工作流环境的全局配置冲突:
    git config user.name "automation-app[bot]"
    git config user.email "automation-app[bot]@users.noreply.github.com"
    

5. 确认提交内容存在

  • 错误日志中出现「Nothing to push」,需确认/tmp/*.csv确实存在文件,可添加调试步骤检查:
    ls -l /tmp/
    
  • 如果文件不存在,需排查PowerShell步骤是否正确生成并保存CSV文件到/tmp目录。

6. 验证工作流上下文变量

  • 被调用工作流中github.repository_owner可能与预期不符,添加调试步骤输出该变量:
    - name: Debug Repository Owner
      run: echo "Repository Owner: ${{ github.repository_owner }}"
    
  • 如果不符,可直接指定组织/用户名,而非依赖上下文变量。

内容的提问来源于stack exchange,提问作者Suhas Chandrashekar

火山引擎 最新活动