前言
在項(xiàng)目中需要引入dependency check
的工具來掃描相關(guān)依賴的庫是否有安全漏洞等問題。由于是使用Gradle作為依賴構(gòu)建工具潜的,以及kotlin作為開發(fā)語言骚揍,所以選擇了owasp dependency check
的Gradle
插件的方式。最后需要將報(bào)告上傳到sonar
進(jìn)行展示啰挪。
工具
- Gradle 6.4.1
- org.owasp.dependencycheck
- sonarqube
流程
引入依賴
在build.gradle.kts
中添加相關(guān)的依賴:
id("org.owasp.dependencycheck") version "5.3.2.1"
id("org.sonarqube") version "2.6.2"
添加Sonar配置項(xiàng)
在sonar
的配置項(xiàng)中添加dependency check
報(bào)告的路徑:
# dependency check reporting
systemProp.sonar.dependencyCheck.htmlReportPath=build/reports/dependency-check-report.html
添加Sonar的dependency check插件
在sonar
中選擇Administration的tab信不,進(jìn)入Marketplace。在Plugins中搜索并安裝如圖的插件:
添加Jenkins Task
項(xiàng)目中使用了Jenkins
作為CI構(gòu)建工具亡呵,所以需要在其中添加一個(gè)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的方式來手動(dòng)run這一個(gè)stage锰什。當(dāng)跑完./gradlew dependencyCheckAnalyze
后就會(huì)生成相關(guān)的report文檔下硕,默認(rèn)是html格式,可以通過配置修改汁胆。
當(dāng)dependency check跑完之后梭姓,就應(yīng)該執(zhí)行./gradlew sonarqube
命令將本地report上傳到sonarqube來分析。sonar的host.url
和login
參數(shù)既可以配置在sonar對(duì)應(yīng)的properties嫩码,也可以在run命令的時(shí)候傳入誉尖。這里是因?yàn)閷?code>creds配置到了Jenkins中,所以在Jenkins file中通過獲取憑證的方式來配置铸题。
成果
當(dāng)Jenkins CI跑完Sonar Analysis后铡恕,就可以去Sonar上查看對(duì)應(yīng)的dependency check的report琢感。如圖