前言
在项目中需要引入dependency check
的工具来扫描相关依赖的库是否有安全漏洞等问题。由于是使用Gradle作为依赖构建工具,以及kotlin作为开发语言,所以选择了owasp dependency check
的Gradle
插件的方式。最后需要将报告上传到sonar
进行展示。
工具
- Gradle 6.4.1
- org.owasp.dependencycheck
- sonarqube
流程
引入依赖
在build.gradle.kts
中添加相关的依赖:
id("org.owasp.dependencycheck") version "5.3.2.1"
id("org.sonarqube") version "2.6.2"
添加Sonar配置项
在sonar
的配置项中添加dependency check
报告的路径:
# dependency check reporting
systemProp.sonar.dependencyCheck.htmlReportPath=build/reports/dependency-check-report.html
添加Sonar的dependency check插件
在sonar
中选择Administration的tab,进入Marketplace。在Plugins中搜索并安装如图的插件:
添加Jenkins Task
项目中使用了Jenkins
作为CI构建工具,所以需要在其中添加一个stage
用于将dependency check report
上传到sonar
中。如下:
stage('DEPENDENCY CHECK') {
steps {
script {
def dependencyCheck = true
try {
timeout(time: 20, unit: 'SECONDS') {
input 'Dependency Check?'
}
} catch(e) {
dependencyCheck = false
}
if (dependencyCheck){
sh './gradlew dependencyCheckAnalyze'
}
}
}
}
stage('SONAR ANALYSIS') {
steps {
script {
sh './gradlew sonarqube -Dsonar.host.url=http://${HOST}:9000 -Dsonar.login=${SONAR_CREDS}'
}
}
}
由于dependency check
并不是每次跑pipeline都需要,所以通过timeout+input的方式来手动run这一个stage。当跑完./gradlew dependencyCheckAnalyze
后就会生成相关的report文档,默认是html格式,可以通过配置修改。
当dependency check跑完之后,就应该执行./gradlew sonarqube
命令将本地report上传到sonarqube来分析。sonar的host.url
和login
参数既可以配置在sonar对应的properties,也可以在run命令的时候传入。这里是因为将creds
配置到了Jenkins中,所以在Jenkins file中通过获取凭证的方式来配置。
成果
当Jenkins CI跑完Sonar Analysis后,就可以去Sonar上查看对应的dependency check的report。如图
Jenkins Sonar
网友评论