复用GitHub工作流时actions/create-github-app-token认证失败求助
问题:使用actions/create-github-app-token@v1推送代码时认证失败
工作流背景与执行步骤
当前工作流为被调用工作流,由子仓库触发调用,使用actions/create-github-app-token@v1生成令牌,执行步骤及耗时如下:
- 检出代码:1秒
- 设置Node.js:1秒
- 计算maxPatchPublishDate:2秒
- 调试maxPatchPublishDate:1秒
- 安装依赖:2秒
- 生成用于检出被调用工作流仓库的令牌:1秒
- 检出被调用工作流仓库:1秒
- 安装AZ模块:3分钟
- Azure登录:20秒
- PowerShell执行:1小时15分钟
- 检查CSV文件是否存在:1秒
- 安装GitHub CLI:1秒
- GitHub CLI认证:1秒
- 重新生成令牌:1秒
- 创建/更新文件、推送变更、创建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




