Greenlight接入CI完整教程:用--exit-code和SARIF让合规扫描成为GitHub Actions的自动守门员
发布时间:2026/10/4 18:23:03 作者:尧图编辑部 阅读量:1,286

Greenlight接入CI完整教程用--exit-code和SARIF让合规扫描成为GitHub Actions的自动守门员【免费下载链接】greenlightPre-submission compliance scanner for the Apple App Store and Google Play. Scans code, privacy manifests, Android manifests, and IPA/APK/AAB binaries against the review guidelines. Offline, no account.项目地址: https://gitcode.com/gh_mirrors/greenlight2/greenlightGreenlight 是一款面向Apple App Store 与 Google Play 的提交前合规扫描器pre-submission compliance scanner离线运行、无需账号、零上传。本文手把手教你把 Greenlight 接入 GitHub Actions用--exit-code参数让 CI 在发现 CRITICAL / HIGH 问题时自动失败再用SARIF 格式把扫描结果直接标注到 Pull Request 上——让合规扫描成为真正的自动守门员 。 为什么要在 CI 里做合规扫描合规问题往往要等到提交审核后才被平台发现一旦被拒就要修复 重新排队代价高昂。把 Greenlight 放进 CI相当于在代码合并前就设了一道预审关卡早发现问题私有 API、硬编码密钥、外部支付、缺 ATT 授权等驳回风险在 PR 阶段就暴露。零配置成本纯静态、离线扫描中大型项目跑完全流程只需个位数毫秒。不依赖账号默认静态检查无需登录CI 里开箱即用。它读取你的源码、隐私清单、Android Manifest 与 IPA/APK/AAB 二进制逐项对照 Apple《审核指南》和 Google Play《开发者项目政策》每条发现都标注对应规则条款。 快速安装拿到 Greenlight 二进制CI 里需要一个可执行的 Greenlight。推荐从源码构建可控且稳定git clone https://gitcode.com/gh_mirrors/greenlight2/greenlight cd greenlight make build # 二进制产出在build/greenlight构建逻辑见 Makefile。也可以用 Homebrewbrew install revylai/tap/greenlight️ 本地先跑一遍greenlight preflight 命令速览preflight一条命令并行跑通所有适用的扫描器Android iOS 混合仓库一次全查greenlight preflight . # 扫描当前目录 greenlight preflight . --ipa build.ipa # 附带 IPA 二进制分析 greenlight preflight . --format json # 输出 JSON 供 CI 消费 greenlight preflight . --format sarif --output greenlight.sarif # 输出 SARIF greenlight preflight . --exit-code # 发现 CRITICAL/HIGH 时非零退出它内置的四级严重度如下前两级会触发 CI 门禁等级含义是否触发--exit-codeCRITICAL几乎必然被拒或安装失败提交前必须修复✅HIGH命中发布截止期 / 强制声明 / 运行时校验失败✅WARN大概率引起审核员注意或被索要说明❌INFO最佳实践建议❌⚙️ 理解--exit-codeCI 守门员的工作原理--exit-code是整个接入的核心开关。它的逻辑非常克制且安全见 internal/cli/preflight.gofail : result.Summary.Critical 0 || result.Summary.High 0 || result.Incomplete也就是说出现以下任一情况进程就返回非零退出码CI 判为失败存在 CRITICAL 或 HIGH 发现扫描不完整某个扫描器中途崩溃——保证没扫完绝不会被误报成通过运行时流程失败配合--verify时。它通过哨兵错误ErrThreshold触发最终由 cmd/greenlight/main.go 转成exit 1且不再重复打印报错——因为完整报告已经输出过了。这个先出报告、再干净退出的设计正是它适合做 CI 门禁的原因日志里既有可读报告又能被 CI 准确捕获失败信号。 在 GitHub Actions 中配置 --exit-code 门禁这是最小可用配置一行命令即可让合规扫描成为自动守门员# .github/workflows/compliance.yml name: Compliance on: [pull_request, push] jobs: greenlight: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkoutv4 - name: Install Go uses: actions/setup-gov5 with: go-version: 1.24 - name: Build Greenlight run: make build - name: App Store Play compliance gate run: ./build/greenlight preflight . --exit-code当任何 CRITICAL / HIGH 问题出现时最后一步非零退出整个 job 失败PR 无法合并。这就是守门员。--exit-code同样可用于单点扫描命令如greenlight playscan . --exit-code仅 Android 项目见 internal/cli/playscan.go。 用 SARIF 把扫描结果标注到 PR只失败还不够团队需要知道具体哪里、违反哪条规则。Greenlight 原生输出SARIF 2.1.0见 internal/sarif/sarif.go可上传到 GitHub code scanning在Security 页签和PR 行内直接看到标注- name: Run Greenlight (SARIF) run: ./build/greenlight preflight . --format sarif --output greenlight.sarif --exit-code - name: Upload SARIF to code scanning uses: github/codeql-action/upload-sarifv3 with: sarif_file: greenlight.sarifSARIF 的严重度映射如下和 CI 门禁语义保持一致Greenlight 等级SARIF level在 PR 中的表现CRITICAL / HIGHerror红色错误通常阻断合并WARNwarning黄色警告INFOnote蓝色提示每条结果都带文件路径与行号审核团队点开即可跳转到违规代码行并看到对应的 Apple 条款如§2.5.1 私有 API。️ 进阶把 JSON 报告存为构建产物想保留一份完整扫描报告供追溯用--format json --output写出文件再上传为 artifact- name: Run Greenlight (JSON report) run: ./build/greenlight preflight . --format json --output greenlight-report.json --exit-code - name: Upload report artifact if: always() uses: actions/upload-artifactv4 with: name: greenlight-report path: greenlight-report.json--output file会把结果写进文件而非 stdout--format json时 stdout 保持纯净方便其他工具解析。⚠️ 常见坑与最佳实践SARIF 与--verify不能同用SARIF 只承载静态代码发现无法表达运行时流程结果。若想跑运行时层级请用--format json或单独执行greenlight verify。这一组合会被命令在入口处直接拒绝避免花钱跑了设备、结果却被静默丢弃。扫描不完整也会失败只要任一扫描器崩溃result.Incomplete即为真--exit-code同样失败——绝不把没扫完当成通过。用配置收敛噪音在仓库根目录放一份.greenlight.yml可调整规则严重度、关闭特定规则、忽略目录详见 README.md 的 Configuration 一节也可用行内指令// greenlight:ignore 规则名静默单行。纯离线、零上传默认静态扫描不联网源码不会离开 CI 环境符合企业数据合规要求。✅ 小结三件事就能让 Greenlight 成为你 GitHub Actions 的自动守门员构建make build拿到二进制见 Makefile门禁greenlight preflight . --exit-codeCRITICAL / HIGH 自动让 job 失败标注--format sarif --output greenlight.sarif code scanning 上传把违规行直接钉在 PR 上。从此合规检查从提交后被动等拒变成合并前主动拦截——在提交之前就知道结果。【免费下载链接】greenlightPre-submission compliance scanner for the Apple App Store and Google Play. Scans code, privacy manifests, Android manifests, and IPA/APK/AAB binaries against the review guidelines. Offline, no account.项目地址: https://gitcode.com/gh_mirrors/greenlight2/greenlight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考