我正在使用Gitlab开发CI/CD管道,目前正在使用snyk运行依赖安全分析。它工作得很好,但我现在想实现一些逻辑,如果发现的漏洞低于给定的阈值,则允许管道在此步骤中继续运行,而不会失败。例如,如果发现了一些中等严重程度的漏洞,但没有发现其他漏洞,则允许这样做,并且不要使管道失败。但是,如果发现了一些中等严重程度的漏洞,并且还发现了一些高度严重的漏洞,则由于这些高度严重的漏洞而导致管道失败。
我使用的是共享的Gitlab runners,所以我通过在线UI来观察所有的东西。我已经检查了我正在使用的命令的退出代码(snyk test),但我所看到的是,如果发现任何漏洞,进程都会以“非零”退出代码退出。当我运行snyk测试时,它发现了6个漏洞,3个高严重性和3个中等严重性,退出代码返回了echo $?是1(如下所示)。
下面是snyk test命令和退出代码的演示:
$ 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我很希望能够获得最高的检测到的严重级别,并使用它来失败或不失败管道,但我在网上看不到任何这样的例子,甚至不知道这是否可能。
发布于 2019-06-27 23:45:42
答案已解决,snyk支持人员表示,您可以在运行snyk命令时使用严重性阈值选项来忽略低于某个阈值的漏洞。
Snyk支持答案:
我们确实有退出代码,当发现漏洞时,我们使用退出代码1,其他失败时使用退出代码2。您还可以将其与-- severity threshold一起使用,例如,如果您只想在严重程度较高的漏洞上失败。
发布于 2020-04-10 20:21:46
您可以添加标志--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等
https://stackoverflow.com/questions/56794473
复制相似问题