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

关闭调用强认证

image

创建jenkins webhook

image
不需要密码,url固定为jenkins url/sonarqube-webhook,名称随意
image

关闭SCM传感器错误

image

生成jenkins调用令牌,生成的token需要记录一下

image

配置jenkins

系统管理-插件管理-安装sonar scan插件

image

系统管理-system- SonarQube servers

填写对应sonar信息,并添加凭证
image
凭证类型选择secret text,填入刚才的token
image

系统管理-全局工具配置

如果服务器上没有安装sonar scan工具的话可以由jenkins自动安装
image

集成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

posted @ 2023-07-12 10:38  北方姆Q  阅读(113)  评论(0编辑  收藏  举报