如何在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
相关产品推荐
相关产品推荐

