GitHub Actions复合步骤输出分组失效 原始控制符未正确格式化
GitHub Actions复合步骤日志控制标记不生效问题
问题表现
在工作流中使用复合动作(composite action)时,运行日志无法正常折叠、高亮,直接输出了原始的日志控制标记,异常日志片段:
##[group***Checking out the ref [command***/usr/bin/git checkout --progress --force -B deployment-manager refs/remotes/origin/deployment-manager Switched to a new branch 'deployment-manager' branch 'deployment-manager' set up to track 'origin/deployment-manager'. ##[endgroup*** [command***/usr/bin/git log -1 --format='%H' '15db9b52614501f2212043fffa9b6df86c047892' ##[group***Run actions/setup-java@v3
group/endgroup/command这类日志装饰器完全没有被解析。
可复现最小配置
工作流文件
on: workflow_dispatch: jobs: build: permissions: contents: read id-token: write runs-on: ubuntu-latest steps: - uses: riskalyze/build-actions/ecr-build-push@v2 with: ecr-lifecycle-policy: ${{ secrets.ECR_LIFECYCLE_POLICY }} ecr-repo-policy: ${{ secrets.ECR_REPO_POLICY }} path: . shared-account-id: 123123123123 shared-role-arn: arn:aws:iam::123123123123:role/githubActionsEcrRole
关联复合动作
调用的复合动作存放在riskalyze/build-actions仓库的ecr-build-push/action.yml路径下。
根因分析
这是GitHub Actions Runner 2.297.0~2.302.0版本存在的已知bug:
- 该版本区间的runner新增的日志掩码逻辑存在误匹配问题,会把日志控制指令末尾的闭合方括号
]识别为需要掩码的敏感内容,替换成掩码占位符*** - 原本合法的日志控制标记格式为
##[group]、##[command]、##[endgroup],被错误篡改后变成##[group***、##[command***、##[endgroup***的无效格式 - 日志前端无法识别篡改后的标记,就会把这些控制指令当做普通文本直接输出,对应的折叠、命令高亮等格式化逻辑也不会生效
- 这个bug只有在复合动作内部嵌套调用其他
uses类型的步骤时才会触发,和日志里出现的嵌套调用actions/checkout、actions/setup-java的场景完全吻合
解决方法
- 自托管runner场景:直接把runner版本升级到2.303.0及以上版本,或者降级到2.296.2及更早的无bug版本即可
- GitHub托管runner场景:该bug已经在新版runner中修复,官方正在逐步全量推送所有托管镜像,删除旧的工作流运行缓存重新触发任务,一般就能自动恢复
- 复合动作维护者场景:如果需要临时绕开这个问题,可以把复合动作内部嵌套的
uses步骤改成原生shell命令实现,减少多层嵌套调用就能避免触发该bug
内容的提问来源于stack exchange,提问作者Jesse Bye
相关产品推荐
相关产品推荐

