当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > GitHub CodeQL 支持 Linux ARM64 后如何调整扫描矩阵

GitHub CodeQL 支持 Linux ARM64 后如何调整扫描矩阵

来源:17golang原创 2026-09-12 15:07:33 0浏览 收藏

如果你的工作流已经使用 GitHub CodeQL 做代码扫描,现在不需要把 Linux ARM64 当成“只能交叉编译、不能原生扫描”的特殊平台了。GitHub 在 2026 年 9 月发布的 CodeQL 2.27.0 已提供 Linux ARM64 的 CodeQL CLI 和 bundle。迁移时最稳妥的做法不是把原来的 x64 任务直接替换掉,而是把 runner 架构显式放进矩阵,先并行保留 x64,再让 ARM64 任务跑一段时间。

官方地址:https://github.com/github/codeql-action/

要点速览
  • CodeQL bundle 的平台支持和 GitHub Actions runner 标签是两件事,必须分别确认。
  • 推荐用 matrix.arch 驱动 runs-on,保留 ubuntu-24.04 并新增 ubuntu-24.04-arm
  • ARM64 首轮先做非阻断灰度,重点观察原生依赖、构建模式和权限,而不是只看扫描步骤是否启动。

先把扫描矩阵拆成平台与分析器两层

这次变化的核心是 CodeQL 2.27.0 可以在 Linux ARM64 上原生运行,但它不会自动把你的工作流改成 ARM64。runs-on 决定作业落在哪种 runner,CodeQL Action 再负责取得适配的 bundle。GitHub Runner Images 的可用标签中,Ubuntu 24.04 ARM64 对应 ubuntu-24.04-arm;普通 Ubuntu 24.04 仍然是 x64。

因此先检查三处:工作流引用的 github/codeql-action 版本是否包含 2.27.0 之后的 bundle,runner 标签是否确实是 ARM64,以及项目的构建脚本有没有固定下载 x64 二进制。只改第一处,作业仍可能跑在 x64;只改第二处,旧 bundle 或旧缓存又可能在 ARM 上出现格式错误。

CodeQL Linux ARM64 扫描矩阵示意图,区分 x64 runner、ARM64 runner 与 CodeQL bundle
图1:CodeQL 扫描矩阵的架构分层示意图,说明 runner 标签与 CodeQL bundle 必须同时匹配(操作示意图)。

用 matrix 新增 ARM64,而不是覆盖原有基线

可以先把平台作为单独变量,让同一份初始化和分析步骤复用。下面的写法只展示矩阵改造重点;实际项目仍需按语言选择自动构建或手动构建模式。

name: codeql

on:
  push:
    branches: [main]
  pull_request:

jobs:
  analyze:
    strategy:
      fail-fast: false
      matrix:
        include:
          - arch: x64
            runner: ubuntu-24.04
          - arch: arm64
            runner: ubuntu-24.04-arm
    runs-on: ${{ matrix.runner }}
    permissions:
      contents: read
      security-events: write
    steps:
      - uses: actions/checkout@v4
      - name: Print runner architecture
        run: |
          # 先记录平台,排查“标签改了但任务仍跑错架构”的问题
          echo "matrix_arch=${{ matrix.arch }}"
          echo "runner_arch=${{ runner.arch }}"
          uname -m
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v4
        with:
          languages: javascript
      - name: Build
        run: npm ci && npm run build
      - name: Analyze
        uses: github/codeql-action/analyze@v4
        with:
          category: "/language:${{ matrix.arch }}"

这里的 category 让结果在代码扫描页面按架构区分,便于观察 ARM64 是否出现只在本平台暴露的构建或依赖问题。它不是“强制 CodeQL 下载 ARM64 bundle”的开关;真正的适配由 Action 和运行环境共同完成。

ARM64 迁移最容易卡在构建步骤

如果使用解释型语言或纯源码查询,迁移通常较轻;如果项目会编译 C/C++、Rust、Java/Kotlin 原生依赖,或构建脚本下载预编译工具,就要把构建阶段单独看待。依赖管理器可能仍在拉取 x86_64 包,容器基础镜像也可能只有 amd64 manifest。CodeQL 扫描启动成功,并不代表构建产物已经按 ARM64 正确生成。

检查对象ARM64 上应确认什么常见处理
runnerrunner.archuname -m 是否为 ARM64/aarch64使用 ubuntu-24.04-arm 或已登记的 self-hosted label
工具链编译器、JDK、Node、Rust 工具是否有 ARM64 版本改用平台感知安装器,避免写死 x64 下载地址
容器与缓存镜像 manifest、缓存 key 是否区分架构matrix.arch 纳入 key,必要时重新生成缓存

CodeQL 官方文档还提醒,CLI 对基于 musl 的 Alpine Linux 并不兼容。不要因为 runner 是 ARM64,就顺手把执行环境切成 Alpine;先保证 glibc 和 bundle 的平台条件满足,再处理项目本身的容器差异。

CodeQL ARM64 迁移检查面板示意图,显示 runner 架构、工具链、容器和缓存检查结果
图2:迁移检查面板的结果示意图,按 runner、工具链、容器和缓存四层确认 ARM64 扫描条件。

先灰度,再决定 ARM64 是否阻断合并

第一轮建议让 ARM64 任务保持非必需检查,连续跑几次 push 和 pull request,记录失败属于 runner、依赖、构建还是 CodeQL 本身。若两种架构的扫描结果都能上传,再把 ARM64 加入保护分支规则。对需要发布多架构镜像的项目,保留两条扫描结果反而更有价值:x64 验证历史基线,ARM64 验证实际交付平台。

反向验证时至少看三条证据:作业日志中的 runner 架构、构建产物或容器的目标架构、CodeQL analyze 步骤是否完整结束并上传结果。只看到“Initialize CodeQL succeeded”不能证明整个 ARM64 迁移完成。

相关问题

只把 runs-on 改成 ubuntu-24.04-arm 可以吗?

不建议。还要确认 Action 使用的 bundle、构建依赖和缓存都支持 ARM64;否则最常见的结果是扫描器能启动,但构建阶段报 exec format error。

要不要删除原来的 x64 CodeQL 任务?

不要急着删。并行保留 x64 能提供基线和回滚路径,等 ARM64 的构建和结果上传稳定后,再按成本决定是否调整频率。

如何确认自己真的跑在 ARM64?

在作业中同时打印 runner.archuname -m,再结合构建工具输出判断。标签名称本身不是运行时证据。

官方资料

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go default 分支让消费者忙等如何修复Go default 分支让消费者忙等如何修复
上一篇
Go default 分支让消费者忙等如何修复
PHP 8.5 NoDiscard 如何提示调用方接收返回值
下一篇
PHP 8.5 NoDiscard 如何提示调用方接收返回值
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    102次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    16次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    29次使用
  • AGI-Eval大模型评测平台:权威榜单、数据集与人机协同评测方案
    AGI-Eval
    AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
    17次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    257次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码