You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions工作流中运行多个Snyk命令?

问题

我正在为Node.js项目配置GitHub Actions工作流,用Snyk执行安全扫描,希望在同一任务中运行多个Snyk命令,同时避免冗余配置。

现有简化版工作流如下:

name: Example workflow for Node using Snyk
on: push
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/node@master
        continue-on-error: true # To make sure that SARIF upload gets called
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: test
          args: --sarif-file-output=snyk.sarif
      - name: Upload result to GitHub Code Scanning
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: snyk.sarif

默认不传入command参数时,会执行snyk test,仅检查依赖漏洞?

我的需求:

  • 运行snyk test、snyk code test和monitor三个命令;
  • 将snyk test和snyk code test生成的SARIF文件上传至GitHub代码扫描。

尝试直接用run命令执行时出现snyk: command not found错误,考虑重复调用snyk/actions/node@master但不确定是否正确,且不知道如何合并两个命令的SARIF文件,请问该如何实现?


解决方案

首先明确:snyk/actions/node@master默认确实会执行snyk test,仅检测依赖漏洞。以下提供两种可行实现方案:

方案1:重复调用Snyk官方Action + 合并SARIF文件

官方Snyk Action单次调用仅支持执行一个命令,因此可以分三次调用分别执行目标命令,前两次生成独立的SARIF文件,再用工具合并后上传。

完整工作流示例:

name: Snyk Security Scan for Node.js
on: push
jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 执行依赖漏洞扫描,生成专属SARIF文件
      - name: Snyk Dependency Scan
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: test
          args: --sarif-file-output=snyk-deps.sarif

      # 执行代码漏洞扫描,生成专属SARIF文件
      - name: Snyk Code Scan
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: code test
          args: --sarif-file-output=snyk-code.sarif

      # 执行项目持续监控
      - name: Snyk Monitor
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: monitor

      # 安装SARIF合并工具
      - name: Install SARIF Merge Tool
        run: npm install -g sarif-merge

      # 合并两个SARIF文件
      - name: Merge SARIF Files
        run: sarif-merge -o combined-snyk.sarif snyk-deps.sarif snyk-code.sarif

      # 上传合并后的SARIF到GitHub代码扫描
      - name: Upload Combined SARIF
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: combined-snyk.sarif

说明:

  • 每次调用Action时指定不同的输出文件名,避免文件覆盖;
  • continue-on-error: true确保扫描失败时后续步骤仍能执行,若需扫描失败即终止流程可删除该配置;
  • 使用sarif-mergenpm包合并SARIF文件,保证所有扫描结果能一次性上传到GitHub代码扫描。

方案2:手动安装Snyk CLI,统一执行所有命令

若不想重复调用Action,可先配置Node环境并安装Snyk CLI,之后在单个run步骤中执行所有命令,配置更紧凑。

完整工作流示例:

name: Snyk Security Scan for Node.js
on: push
jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20 # 替换为你的项目Node.js版本

      # 全局安装Snyk CLI,解决command not found问题
      - name: Install Snyk CLI
        run: npm install -g snyk

      # 批量执行所有Snyk命令
      - name: Run Snyk Scans & Monitor
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        run: |
          # 依赖漏洞扫描,生成SARIF
          snyk test --sarif-file-output=snyk-deps.sarif || true
          # 代码漏洞扫描,生成SARIF
          snyk code test --sarif-file-output=snyk-code.sarif || true
          # 项目持续监控
          snyk monitor

      # 合并并上传SARIF,步骤同方案1
      - name: Install SARIF Merge Tool
        run: npm install -g sarif-merge

      - name: Merge SARIF Files
        run: sarif-merge -o combined-snyk.sarif snyk-deps.sarif snyk-code.sarif

      - name: Upload Combined SARIF
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: combined-snyk.sarif

说明:

  • actions/setup-node用于配置与项目匹配的Node环境,确保Snyk CLI安装正常;
  • || true保证单个命令失败时后续命令仍能执行,按需调整;
  • 这种方式减少了Action调用次数,配置更简洁。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:25:27