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

3
我正在设置一个GitHub Actions工作流,使用Snyk对我的Node.js项目进行安全扫描。我希望在工作流的同一个任务中运行多个Snyk命令,但是我不确定如何在没有冗余配置的情况下实现这一点。
以下是我现有的GitHub Actions工作流的简化版本:
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

默认情况下,如果我们不传递任何命令,它将运行`snyk test`,它只检查依赖项的漏洞。
我想运行多个命令:`snyk test`、`snyk code test`和`monitor`。
对于`snyk test`和`snyk code test`,我希望生成的`sarif`文件能够上传到GitHub代码扫描。
我在Snyk文档中找不到相关信息。
那么,我如何获取`snyk test`和`snyk code test`的`sarif`文件呢?
我尝试过,但没有成功。我得到了错误:`snyk: command not found`。
      - name: Run Snyk package test
        run: snyk test
      - name: Run Snyk code test
        run: snyk code test > snyk.sarif
      - name: Run Snyk monitor
        run: snyk monitor

现在,我正在考虑为每个命令重复这个块。
      - name: Run Snyk to check for package vulnerability and
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: monitor
      - name: Run Snyk to check for package vulnerability
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: monitor

但是,我不确定这是否是正确的方法。而且,使用这种方法,我无法将文件组合起来进行和测试。
1个回答

1
我能够创建一个目录,其中保存了每个步骤的“sarif”文件,然后上传了这个目录。
name: Snyk Scan
on:
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  snyk-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Get Node v18
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install dependencies
        run: npm install
      - name: Run Snyk test
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: test --sarif
          args: --sarif-file-output=snyk_test.sarif
      - name: Run Snyk code test
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: code test --sarif
          args: --sarif-file-output=snyk_code_test.sarif
      - name: Run Snyk monitor
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: monitor
      - name: Create SARIF directory and move SARIF files
        run: |
          mkdir sarif_files &&
          mv snyk_test.sarif snyk_code_test.sarif sarif_files/
      - name: Upload result to GitHub Code Scanning
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: sarif_files

还不确定,是否这是正确的方式。


1
你所做的似乎是正确的方法。让我与你分享一些使用Github Actions的模板,其中Snyk扫描结果会被推送到Github的sarifs文件中,如果这对你有帮助的话。https://github.com/snyk-labs/snyk-cicd-integration-examples/blob/master/GitHub/GH%20Action%20pipeline-snyk%20code%20scan-SARIF%20file.ymlhttps://github.com/snyk-labs/snyk-cicd-integration-examples/blob/master/GitHub/GH-actions-pipeline-npm-nodejs-sarif.yml - Jonathan Gruber
还有一点好奇:为什么您要在流水线中集成Snyk Code?在Snyk,Snyk Code的本地SCM集成通常更强大。
  • PR检查可用(需要向Snyk账户团队申请开启)
  • 他们提供代码片段以查看问题和代码流程
  • 每次有代码更改时,它们会自动重新扫描,因此您不需要在流水线中触发任何操作
只是一个想法,以防您不知道,当然,CICD没有错。但是,SCM集成通常是Snyk Code的更好工作流程
- Jonathan Gruber
@JonathanGruber 谢谢!你能给我提供一下你第二条评论的链接吗?我想多读一些。 - sujeet
如果您正在使用企业计划,请向支持团队或您的账户团队申请开通 PR 检查功能。https://docs.snyk.io/scan-application-code/run-pr-checks - Jonathan Gruber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接