我正在使用Gitlab开发CI / CD管道,目前正在使用snyk进行依赖项安全性分析。它的运行效果很好,但是我现在想实现一些逻辑,如果发现的漏洞在给定的阈值以下,则允许管道继续执行此步骤而不会失败。例如,如果发现一些中等严重性漏洞而没有其他任何漏洞,则允许这样做并且不要使管道失败。但是,如果找到了一些中等严重性漏洞,并且还发现了一些高严重性漏洞,则由于这些高严重性漏洞而使管道失败。
我正在使用共享的Gitlab运行程序,因此我正在观看通过在线UI运行的所有内容。我已经研究了我正在使用的命令的退出代码(snyk测试),但是我所看到的是,如果发现任何漏洞,该进程将以“非零”退出代码退出。当我运行snyk测试时,它发现6个漏洞,三个严重级别为3个,严重级别为3个,退出代码返回echo $?是1(如下所示)。
这是snyk测试命令和退出代码的演示:
$ snyk test
...some vulnerabilities...
Tested 126 dependencies for known vulnerabilities, found 6 vulnerabilities, 32 vulnerable paths.
$ echo $?
1
这是在我的.gitlab-ci.yml中定义的snyk作业,以防有用:
# TODO Make stage success/failure based on vulnerability severity
snyk-dependency-analysis:
image: awesomeaiden/custom_snyk
stage: static_analysis
only:
changes:
- boot-kotlin-svc/**/*
before_script:
- cd boot-kotlin-svc
- export GRADLE_USER_HOME=`pwd`/.gradle
- export SNYK_TOKEN=$secret_snyk_token
after_script:
- cd ..
variables:
SNYK_TOKEN: $secret_snyk_token
script:
- snyk test
cache:
key: "$CI_COMMIT_REF_NAME"
policy: pull
paths:
- build
- .gradle
allow_failure: true
我希望能够获得最高的检测到的严重性级别,并使用它来使管道失败或不失败,但是我没有在线看到任何此类示例,也不知道它是否可能实现。
答案 0 :(得分:0)
答案已解决,snyk支持人员说您可以在运行snyk命令时使用严重性阈值选项来忽略低于特定阈值的漏洞。
Snyk支持答案:
我们确实有退出代码,对于发现漏洞,我们使用退出代码1,对于其他任何失败,我们使用退出代码2。例如,如果您只想在严重性高的漏洞上失败,也可以将它与--severity-threshold结合使用。
答案 1 :(得分:0)
您可以添加标志--severity-threshold=low|medium|high
使用此标志,仅提供或更高级别的漏洞将 被报道
snyk test --all-sub-projects --severity-threshold=high
默认情况下,Snyk还会扫描所有可能的配置,包括仅用于测试的配置。要排除这些依赖项,可以使用--configuration-matching
标志。这是Gradle项目的示例:
snyk test --all-sub-projects --configuration-matching=^(?!test).*
这将排除以下配置:testCompile
,testCompileClasspath
,testRuntimeClasspath
,testImplementation
等