使用Jenkins+SonarQube扫描Angular项目
准备环境
安装Docker & docker-compose
-
安装docker
参见文章:在云服务器上安装docker -
安装docker-compose
参见文章:docker-compose的安装和设定
在这里不详细描述
Jenkins
- 使用 docker 拉去 Jenkins 的镜像:
docker pull 10.101.0.9:5000/jenkins:2.164.3
- docker-compose使用的yml文件
写一个docker-compose.yml 文件,通过 docker-compose 的方式启动 Jenkins
version: '2'
services:
jenkins:
image: 10.101.0.9:5000/jenkins:2.164.3
ports:
- "32003:8080"
environment:
- JENKINS_MODE=master
- TZ=Asia/Shanghai
- JENKINS_ADMIN_ID=root
- JENKINS_ADMIN_PW=abcd1234
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
volumes:
- ./data/:/data/jenkins
- /Users/wjy/WebstormProjects/demo-test:/data/jenkins/workspace/demo
restart: "no"
在这里 volumes 中,将Jenkins的数据目录和需要扫描的代码目录进行挂载
执行命令:
docker-compose -f jenkins.yml -p dp21 up -d
等待启动完成以后,打开页面:http://localhost:32003 就会看到jenkins的页面了
SonarQube
- 使用 docker 拉去 SonarQube 的镜像:
docker pull liumiaocn/sonarqube:7.0
- 启动 SonarQube
docker run --rm -d --name sonarqube \
-p 9000:9000 -p 9092:9092 \
liumiaocn/sonarqube:7.0
等待启动完成以后,打开页面:http://localhost:9000 就会看到 SonarQube 的页面了
配置Jenkins
- 配置Sonar-Scanner
登录以后->系统管理->全局工具配置,找到Sonar-Scanner的条目
这里如果没有Sonar-Scanner的条目,请到系统管理->插件管理中,进行安装
- 添加连接 SonarQube 服务器的凭证
创建Job
登录以后,点击页面的 “Please create new jobs to get started.” 开始创建Job
创建以后
写 Pipeline script
import groovy.json.JsonSlurperClassic
node {
def appName="demo"; def appVersionCode="1";
sh "sleep 1"
def appCodeSonarDirs = "/data/jenkins/workspace/demo";
def appCodeSonarScannerDirs = "/data/jenkins/workspace/demo/src";
stage('Review') {
echo "-----New Stage Start-----"
echo "Stage[Review] Start!"
def result = 0;
try {
echo "Stage[Review] start!"
def inventoryUrl = "http://192.168.3.3:9000"
def sonarqubeScannerHome = tool name: 'Bundled', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
withCredentials([usernamePassword(credentialsId: 'Sonar_DevOps_Default', usernameVariable: 'username', passwordVariable: 'password')]) {
sh "${sonarqubeScannerHome}/bin/sonar-scanner -X -Dsonar.host.url=${inventoryUrl} -Dsonar.login=admin -Dsonar.password=admin -Dsonar.projectName=${appName} -Dsonar.projectVersion=${appVersionCode} -Dsonar.projectKey=${appName} -Dsonar.sources=${appCodeSonarScannerDirs}"
}
result = 2
} catch (e) {
result = -1
echo "-----Stage End-----Result[-1]------"
throw e
} finally {
echo "Stage[Review] End!"
}
}
}
***需要注意的是:jenkins 中不支持 localhost ***
保存以后,开始构建
最终的扫描结果: