问题描述
在使用GitLab流水线时,有一个需求是希望在检测到漏洞时使流水线作业失败。他目前正在使用依赖检查工具来扫描应用程序,但不确定如何配置使流水线作业在发现漏洞时失败。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
你只需要配置mvn依赖插件,在发现漏洞时使其失败即可。
你可以通过设置failBuildOnCVSS
配置标志来实现。例如,以下是从文档中的严重程度为8的示例:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>6.2.2</version>
<configuration>
<failBuildOnCVSS>8</failBuildOnCVSS>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
...
</project>
通过这样的配置,如果发现严重程度为8或更高的漏洞,mvn作业将失败,从而导致流水线作业失败。
方案2
如果mvn依赖检查插件没有提供直接的配置选项来使作业失败,你可以在流水线脚本中手动检查漏洞并退出作业。
以下是一个示例流水线脚本,可以在发现漏洞时使作业失败:
dependency_scanning:
stage: security_scan
script:
- mvn dependency-check:aggregate -B "-DdbUser=$NVD_DB_USER" "-DdbPassword=$NVD_DB_PASSWORD" "-DconnectionString=$NVD_DB_CONSTRING"
# 检查漏洞并退出作业
- |
if grep -q "One or more dependencies were identified with known vulnerabilities" ./target/dependency-check-report.html; then
echo "Vulnerabilities found. Failing the job."
exit 1
fi
artifacts:
paths:
- ./target/dependency-check-report.html
only:
- master
在这个示例中,我们首先使用mvn dependency-check:aggregate
命令运行依赖检查。然后,我们使用grep
命令在生成的报告文件中查找是否存在漏洞。如果找到漏洞,我们使用exit 1
命令退出作业,并将作业标记为失败。
请注意,这只是一个示例脚本,你可能需要根据你的具体情况进行调整。确保在脚本中使用正确的命令和文件路径来检查漏洞并退出作业。
以上是两种在GitLab流水线作业中使其失败的方法。你可以根据你的需求选择适合你的方法。
正文完