Я разрабатываю конвейер CI / CD с Gitlab и в настоящее время использую snyk для выполнения анализа безопасности зависимостей.Это работает отлично, но я хотел бы теперь реализовать некоторую логику, чтобы позволить конвейеру без сбоев продолжаться на этом этапе, если найденные уязвимости находятся под заданным порогом.Например, если обнаружено несколько уязвимостей средней серьезности и больше ничего, разрешите это и не отказывайте в конвейере.Однако, если обнаружены некоторые уязвимости средней серьезности и несколько уязвимостей высокой серьезности, произойдет сбой конвейера из-за этих уязвимостей высокой степени опасности.
Я использую общие бегуны Gitlab, поэтому я наблюдаю, как все проходит черезонлайн интерфейс.Я изучил коды выхода для команды, которую я использую (тест snyk), но все, что я видел, это то, что если обнаружена какая-либо уязвимость, процесс завершается с «ненулевым» кодом выхода.Когда я запустил тест snyk и обнаружил 6 уязвимостей, три высокой и три средней серьезности, код завершения вернулся с echo $?было 1 (показано ниже).
Вот демонстрация команды тестирования snyk и кода выхода:
$ snyk test
...some vulnerabilities...
Tested 126 dependencies for known vulnerabilities, found 6 vulnerabilities, 32 vulnerable paths.
$ echo $?
1
А вот работа snyk, определенная в моем .gitlab-ci.yml вполезный случай:
# 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
Мне бы хотелось получить наивысший уровень обнаруженной серьезности и использовать его для сбоя или сбоя конвейера, но я не вижу примеров этого в сети и нене знаю, возможно ли это вообще.