用Sonar Scanner和Jenkins扫描PHP/JavaScript/C#/HTML
本文介绍在Linux平台中使用Sonar Scanner和Jenkins扫描PHP/JavaScript/C#/HTML的方法。
前言
在本简短指南中,我们将利用SonarQube通过Sonar Scanner声纳扫描仪客户端扫描PHP或JavaScript或Java以外的其他编程语言。它的工作原理是Sonar Scanner连接到SonarQube,并扫描位于不同位置的服务器中的应用程序。对于这个例子,我们将使用Sonar Scanner和Jenkins实例,然后在CI/CD管道期间使用它来扫描应用程序。
要完成本文的目标,得要在Linux平台中安装了SonarQube和Jenkins,并且已经成功集成。下面的指南将为您提供帮助:
在Debian 11 Linux系统上安装和配置SonarQube:https://www.hmxthome.com/linux/5143.html
在Ubuntu 22.04系统上安装Jenkins Server的方法:https://www.hmxthome.com/linux/4903.html
使用Sonar Scanner和Jenkins扫描PHP/JavaScript/C#/HTML的操作步骤
步骤1、安装Sonar Scanner的说明
用户需要完成安装Sonar Scanner,如果还没有安装,可参考在Linux系统中安装Sonar Scanner声纳扫描仪一文,阅读地址在https://www.hmxthome.com/linux/5158.html。
步骤2、让Jenkins知道在哪里可以找到Sonar Scanner
在这一步中,我们将通知Jenkins声纳扫描仪已经安装,并将其指向其主目录。要完成此操作,请使用具有管理员权限的用户登录Jenkins服务器,然后单击“管理Jenkins”>“全局工具配置”(“Manage Jenkins” > “Global Tool Configuration”):
向下滚动到“SonarQube Scanner”部分,然后单击“Add SonarQube Scanner”。您将看到一个类似表单的迷你页面,可以在其中输入详细信息。给它一个您喜欢的名称,取消选中自动安装,然后输入SONAR_RUNNER_HOME值,即我们安装Sonar Scanner的位置,即“/opt/sonarqube/sonar-scanner/bin/”。屏幕截图如下所示:
步骤3、更新您的Jenkinsfile
安装Sonar Scanner并将其主目录添加到Jenkins服务器后,是时候将扫描步骤添加到Jenkinsfile中了,以便在部署之前扫描代码并提交报告。
1、用于编写脚本的Jenkinsfile
node('master') {
def projectName = 'testProject'
stage("Sonar Scan") {
withEnv(["PATH=/usr/bin:/usr/local/jdk-11.0.2/bin:/opt/sonarqube/sonar-scanner/bin/"]) {
withSonarQubeEnv(installationName: 'sonarqube-Server', credentialsId: 'sonarqubeSecret') {
sh "sonar-scanner \
-Dsonar.projectKey=${projectName} \
-Dsonar.sources=. \
-Dsonar.host.url=${env.SONAR_HOST_URL} \
-Dsonar.login=${env.SONAR_AUTH_TOKEN} \
-Dsonar.projectName=${projectName} \
-Dsonar.projectVersion=${env.BUILD_ID}"
}
}
}
}
2、用于声明性Jenkinsfile
pipeline {
agent any
environment {
projectName = "test-project"
}
stages {
stage ("SonarQube Scan") {
steps {
withEnv(["PATH=/usr/bin:/usr/local/jdk-11.0.2/bin:/opt/sonarqube/sonar-scanner/bin/"]) {
withSonarQubeEnv(installationName: 'sonarqube-Server', credentialsId: 'sonarqubeSecret') {
sh "sonar-scanner \
-Dsonar.projectKey=${projectName} \
-Dsonar.sources=. \
-Dsonar.host.url=${env.SONAR_HOST_URL} \
-Dsonar.login=${env.SONAR_AUTH_TOKEN} \
-Dsonar.projectName=${projectName} \
-Dsonar.projectVersion=${env.BUILD_ID}"
}
}
}
}
}
}
withEnv选项将帮助Jenkinsfile从服务器中的$PATH中找到Sonar Scanner。如果您收到错误“sonar-scanner command not found”,请考虑在上面的代码中添加此选项。
您还会注意到,我们没有使用任何登录密钥和在SonarQube上创建的项目。所有这些都由我们在将Jenkins与SonarQube集成时生成的令牌来处理。SonarQubeEnv的包装器使用我们已经在Jenkins中添加的凭据为我们完成了这项工作。withSonarQubeEnv暴露“${env.SONAR_AUTH_TOKEN}”和“${env.SONAR_HOST_URL}”环境变量,这些变量被注入Sonar Scanner。可以在Jenkinsfile中设置“${projectName}”变量,如上文所示。
步骤4、为SonarQube中的各种编程语言添加缺失的插件
要扫描JavaScript、C#、CSS、Visual Basic、HTML、PHP、Python等源代码,SonarQube需要安装各种语言的插件。SonarQube安装了大部分模块。如果其中一个尚未安装,请执行以下操作。使用管理员凭据登录SonarQube,然后单击“管理”>“市场”(“Administration” > “Marketplace”):
然后在“Plugins”部分搜索插件,如下所示:
步骤5、开始构建过程
希望每个方面都能很好地工作,并完美地集成在一起,我们可以自信地启动管道。您可以从GitHub或GitLab中的源代码触发它,也可以在Jenkins中手动构建它。扫描完成后,您应该会看到失败或成功的报告,如下所示:
结论
Sonar Scanner与SonarQube相结合,成为您安全工具包中最好的标签团队。让它们在您的CI/CD构建中为您工作,并最大限度地减少部署因可避免的安全缺陷而受损的代码的机会。