1. SonarQube质检
应用介绍: SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量通过插件形式;
可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测; SonarQube官网:> https://www.sonarqube.org/
1.安装sonarqube
1.安装javayum install java -y
2.安装mysql5.6以上版本的数据库yum localinstall mysql-community-*
3.启动mysqlsystemctl start mysqld
4.创建一个sonar的库
[root@sonarqube ~]# mysql -uroot -e "create database sonar charset utf8;"
[root@sonarqube ~]#mysql -uroot -e "show databases;"
+———————————-+
| Database |
+———————————-+
| information_schema |
| mysql |
| performance_schema |
| sonar |
+———————————-+
5.安装sonarqube服务端(二进制安装)
[root@sonarqube ~]# unzip sonarqube-7.0.zip -d /usr/local/
[root@sonarqube ~]# ln -s /usr/local/sonarqube-7.0/ /usr/local/sonarqube
6.配置sonarqube连接数据库
[root@sonarqube ~]# grep “^[a-Z]” /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=oldxu.com
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
7.启动sonarqube服务端 (不能直接使用root启动,需要创建普通⽤户)
[root@sonarqube ~]# useradd sonar
chown -R sonar.sonar /usr/local/sonarqube
[root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
Usage: /usr/local/sonarqube/bin/linux-x86-64/sonar.sh { console | start | stop | restart | status | dump }
注意:每次登陆⼀个新的系统后,请修改默认的密码。养成习惯。
安装插件,让其⽀持中⽂
[root@sonarqube ~]# rm -rf /usr/local/sonarqube/extensions/plugins/
[root@sonarqube ~]# tar xf sonarqube/sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions/
[root@sonarqube ~]# chown -R sonar.sonar /usr/local/sonarqube/extensions/
5.⽣成 ⼀个 token令牌(其他系统 需要访问sonarqube就需要使⽤token令牌的⽅式复制下来。)
47cc30b61854c797fc1f50ccd7b1223400a87239 sonar令牌
3.配置sonar-scanner客户端
Sonar-Scanner这是个客户端,需要安装才可以分析:
- 拷贝sonar-scanner至jenkins服务器
[root@sonarqube ~]# scp`` ``sonarqube/sonar-scanner-cli-4.0.0.1744-linux.zip`` ``root@10.0.0.120:~
- 在jenkins服务上安装sonar-scanner
[root@jenkins ~]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d`` ``/usr/local/
[root@jenkins ~]# ln -s /usr/local/sonar-scanner-4.0.0.1744-linux/ /usr/local/sonar-scanner
- 确保jenkins和sonarqube的主机通讯:
[root@jenkins web-monitor]# echo "10.0.0.130 sonar.oldhou.com" >> /etc/hosts
[root@jenkins web-monitor]# ping`` ``sonar.oldhou.com``
(10.0.0.130) 56(84) bytes of data. 64 bytes from sonar.oldxu.com (10.0.0.130): icmp_seq=1 ttl=64 time=0.446 ms
4. 手动在jenkins服务上推送代码测试:
———-html代码———- 必须要进到monitor项目目录下方可执行扫描
[root@jenkins ~]# cd web-monitor/
[root@jenkins web-monitor]#/usr/local/sonar-scanner/bin/sonar-scanner
\ -Dsonar.projectKey=html`` ``\``
-Dsonar.sources=.`` ``\``
-Dsonar.host.url``=``http://sonar.oldhou.com:9000`` ``\
-Dsonar.login=``47cc30b61854c797fc1f50ccd7b1223400a87239
———-java代码————- 必须要进到java项目目录下方可执行扫描
[root@jenkins ~]#cd hello-word-demo/
[root@jenkins hello-word-demo]# mvn`` ``sonar:sonar`` ``\
-Dsonar.host.url=``http://sonar.oldhou.com:9000 `` ``\``
-Dsonar.login=``47cc30b61854c797fc1f50ccd7b1223400a87239
sonarqube:web界面显示结果:
2. 将sonarqube集成到jenkins
( sonarqube服务端 Sonar-Scanner)
jenkins集成Sonar-Scanner-扫描html
发布之前进行代码扫描功能:
sonar.projectName=${JOB_NAME} #起个名字
sonar.projectKey=html
sonar.sources=.
Sonar-Scanner-扫描java
sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.
sonar.java.binaries=target/sonar
3. 钉钉通知发布结果:
调⽤Shell发布 对应的tag标签
给你一个webhook:(用于构建)
https://oapi.dingtalk.com/robot/send?access_token=d24675be850d795778c2a623554b3ca7d5a61572859edd33ed1c18c3ddd1746e
4. 钉钉通知扫描内容:
jenkins需要下载安装dingding-sonar项目:
wget https://gitee.com/chejiangyi/dingding-sonar/repository/archive/master.zip unzip master.zip
[root@jenkins ~]# screen -S sonar_dingding
[root@jenkins ~]# cd dingding-sonar/releases/
[root@jenkins releases]# ls
dingding-sonar-1.0-SNAPSHOT.jar
启动:
java -jar dingding-sonar-1.0-SNAPSHOT.jar \
—server.port=8082 \
—sonar.url=http://sonar.oldhou.com:9000 \
—sonar.login=admin \
—sonar.password=123123qwe
钉钉不能报告内容有可能就是用户密码或以下认证的问题
指定账号密码后需要开启强制认证:
dingding_token="d24675be850d795778c2a623554b3ca7d5a61572859edd33ed1c18c3ddd1746e"
sonar_project_id=${JOB_NAME}
sonarreport=$(curl -s http://localhost:8082/?projectname=html)
curl -s "https://oapi.dingtalk.com/robot/send?access_token=${dingding_token}" \
-H "Content-Type: application/json" \
-d "{
\"msgtype\": \"markdown\",
\"markdown\": {
\"title\":\"sonar代码质量\",
\"text\": \"## sonar代码质量报告: \n
[oldhou sonar](http://sonar.oldhou.com:9000/dashboard?id=${sonar_project_id}) \n
${sonarreport} \n\"
}
}"
添加关键字:
pipeline
1.概述:
pipeline流水线::将多个任务链接起来
2.为什么使用pipline:
- 能直观展示每个阶段的任务
- 能直观的展示每个阶段执行的时间
- 能快速的定位的那个阶段任务出现错误
3.pipeline核心概念:
agent:节点
stage:阶段
steos:动作
2.jenkins pipeline语法示例
pipeline {
agent any
stages {
stage ('下载代码') { steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-root-key', url: 'git@gitlab.oldxu.com:dev/web-monitor.git']]])
}
}
pipeline {
agent any
stage ('检测代码') { steps {
sh '/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectName=${JOB_NAME} \
-Dsonar.projectKey=${JOB_NAME} \
-Dsonar.sources=. \
-Dsonar.host.url=http://sonar.oldxu.com:9000 \
-Dsonar.login=7182a9bb0fcddd17fb6cacc99afdbfe4bf1040dc'
}
}
GitLab webhook URL: http://jenkins.oldhou.com:8080/project/web-html-sonar-dingding
3703483b107577b6e25af2caed65b864