SAST扫描
这是一种无需运行程序即可调试代码的方法。它根据预定义的规则集分析代码。
SonarQube允许所有开发人员编写更清洁、更安全的代码。它支持多种用于扫描的编程语言(Java、Kotlin、Go、JavaScript)。它还支持为代码覆盖率运行单元测试。它可以轻松地与 Jenkins 和 Azure DevOps 集成。Checkmarx、Veracode 和 Klocwork 也提供类似的功能,但这些都是付费工具。
https://www.sonarsource.com/products/sonarqube/downloads/
sonar安装
sonar官网下载zip包解压即可,sonar其实也有收费版,不过我等穷人自然还是使用社区版
- sonar需要jdk,不同版本之间对应关系不同,一般来说现在我们需要jdk11
- sonar会用到es,使用sonar在修改限制配置文件后内存目测也需要2G+
- sonar8.6之前的版本可以连Mysql,但是Mysql需要是是5.6
- sonar也可以使用内置的h2库,不过这个库无法支持自动版本升级及数据迁移等功能
- sonar与jenkins集成已有插件,官网也提供了pipeline写法
去官网下载zip包后unzip后放置在/usr/local下
[root@jenkins-bj-ali-ql1 local]# useradd sonar
[root@jenkins-bj-ali-ql1 local]# chown sonar sonarqube -R
[root@jenkins-bj-ali-ql1 local]# cd sonarqube/
[root@jenkins-bj-ali-ql1 sonarqube]# cat start.sh
#!/bin/bash
su - sonar /usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart
[root@jenkins-bj-ali-ql1 sonarqube]# sh start.sh
等待一会即可访问9000端口(后续称访问地址为url),如果有报错可以看logs目录下日志提示,一般都是es内存的问题
[root@jenkins-bj-ali-ql1 sonarqube]# echo "vm.max_map_count = 262144" >>/etc/sysctl.conf
[root@jenkins-bj-ali-ql1 sonarqube]# sysctl -p
首次使用需要先访问url/setup初始化数据,再次等待后即可进去sonar web页面,默认账号密码admin/admin
关闭调用强认证
创建jenkins webhook
不需要密码,url固定为jenkins url/sonarqube-webhook,名称随意
关闭SCM传感器错误
生成jenkins调用令牌,生成的token需要记录一下
配置jenkins
系统管理-插件管理-安装sonar scan插件
系统管理-system- SonarQube servers
填写对应sonar信息,并添加凭证
凭证类型选择secret text,填入刚才的token
系统管理-全局工具配置
如果服务器上没有安装sonar scan工具的话可以由jenkins自动安装
集成jenkins pipeline
静态扫描基于代码,但是相比之前的扫描,耗时会多一些,因此我们放在SBOM之后
stage('SonarQube') {
steps {
script{
// 这是全局工具配置里sonar scan工具的名字,如果是服务器自带的,则在命令里指定调用路径即可
sqs = tool 'SonarQubeScanner'
withSonarQubeEnv('SonarQube') {
sh "${sqs}/bin/sonar-scanner \
-Dsonar.projectKey=${JOB_NAME} \
-Dsonar.projectName=${JOB_NAME} \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.language=golang \
-Dsonar.projectVersion=${BUILD_NUMBER} \
-Dsonar.java.binaries=. \
-Dsonar.sources=. \
-Dsonar.exclusions=**/*_test.go,**/vendor/**,**/*.pb.go \
1>/dev/null"
}
// 这里需要稍微等待下,因为网络调用有点会有点延迟
sleep(5)
timeout(time: 5, unit: 'MINUTES') {
script {
def qg = waitForQualityGate()
if (qgstatus != "OK") {
error "Pipeline aborted due to a quality gate failure: ${qgstatus}"
}
}
}
}
}
}
其他SAST 扫描工具
Sonarqube
Checkmarx
Veracode
Klocwork
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律