### 理论知识
#### SonarQube 与 Jenkins 简 介
SonarQube 是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 Java、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:
- 检查代码是否遵循编程标准:如命名规范,编写的规范等。
- 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
- 检测代码的重复代码量:SonarQube 可以展示项目中存在大量复制粘贴的代码。
- 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
- 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
** SonarQube 平台是由4个部分组成:**
- SonarQube Server
- SonarQube Database
- SonarQube Plugins
- SonarQube Scanner
参考https://www.ibm.com/developerworks/cn/devops/1612_qusm_jenkins/index.html 感谢《IBM的曲世明和陈计云》
#### SonarQube Scanner原理
SonarQube Scanner,作为代码扫描的工具,通过它,将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。
可以认为SonarQube Scanner就是SonarQube的客户端。SonarQube Scanner很方便和不同类型的构建工具进行整合
参考http://aoyouzi.iteye.com/blog/2294992 感谢《aoyouzi》
#### 功能介绍(个人理解)
- Jenkins
- SonarQube Server(接收代码,进行分析)
- SonarQube Scanner for Jenkins(Jenkins用来调用SonarQube Scanner的插件)
- SonarQube Scanner(SonarQube的客户端,将读取的代码发送到SonarQube Server)
### SonarQube Server服务部署
#### 下载SonarQube Server(5.6.6版本)
https://www.SonarQube.org/downloads/
#### 安装SonarQube Server
1. 部署Centos 7.3 x86_64
2. 部署JDK1.8(略)
3. 部署MysQL5.7(略)
4. 创建MySQL用户
```shell
create user 'sonar'@'192.168.0.231' identified by 'sonar2017';
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on sonar.* to 'sonar'@'192.168.0.231';
```
4. 安装SonarQube(以前叫sonar)上传sonar到/opt目录下
```shell
unzip SonarQube-5.6.6.zip
mv SonarQube-5.6.6 /app/
ln -s SonarQube-5.6.6 SonarQube
```
5.编辑配置文件(/app/SonarQube/conf/sonar.properties)
```shell
#grep -vE '#|^.$' /app/SonarQube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar2017
sonar.jdbc.url=jdbc:mysql://192.168.0.231:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=192.168.0.231
sonar.web.context=/sonar
sonar.web.port=9000
sonar.log.level=INFO
sonar.path.logs=logs
```
备注:sonar.web.context=/sonar 是访问地址后缀,配置后访问地址变为,http://192.168.0.231:9000/sonar
#### SonarQube Server汉化(注意:不同版本,汉化包不同)
[SonarQube 5.6.6中文包地址](https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.15/sonar-l10n-zh-plugin-1.15.jar "Sonar 5.6.6中文包地址")
上传到/app/SonarQube/extensions/plugins
#### 启动SonarQube
- 启动
```shell
/app/SonarQube/bin/linux-x86-64/sonar.sh restart
```
- 看日志
```shell
tail -f /app/SonarQube/logs/sonar.log
```
- console模式
```shell
/app/SonarQube/bin/linux-x86-64/sonar.sh console
```
#### 登录,并修改密码,创建token(后面jenkins要用)
- 登录地址:http://192.168.0.231:9000/sonar 默认用户名密码admin/admin
- 修改管理员密码
login-->配置-->权限-->用户-->点击administraotr后面的锁图标
- 创建一个用户ding
login-->配置-->权限-->用户-->token-->update token-->Generate Tokens(输入ding)-->generate
记录下token
参考文章:http://www.cnblogs.com/westfly/p/6098100.html 感谢《westfly》
### Jenkins和SonarQube Server集成
#### 安装SonarQube Scanner for Jenkins插件
系统管理-->管理插件-->SonarQube Scanner for Jenkins-->安装
#### 配置SonarQube Server的连接
系统管理-->系统设置-->配置SonarQube servers
```shell
Environment variables 勾选
SonarQube installations
name:随便写
Server URL:http://192.168.0.231:9000/sonar
Server version:5.3 or higher
注:5.1 or higher不支持token方式,如果写了数据库信息,在输出中会提示这个特性已被忽略,不建议使用。
Server authentication token:你懂的。
```
#### 配置项目构建过程中的选项,增加SonarQube Scanner
系统管理-->Global Tool Configuration
SonarQube Scanner for MSBuild(Microsoft 和 Visual Studio的生成系统,不配置)
SonarQube Scanner(我们配置这个)
```shell
name:随便填
自动安装:勾选
选择版本:最新(3.0.3.778)
```
#### 项目中配置SonarQube Scanner参数(读哪的代码、什么语言等)
项目-->增加构建步骤-->Execute SonarQube Scanner
JDK:选jdk1.8(提前配置)
Analysis Properties:
```shell
sonar.language=java
sonar.sources=$WORKSPACE/
sonar.projectName=ding
sonar.projectKey=ding
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
```
```shell
sonar.language=java
开发语言(匹配Server上的语言规则)
sonar.sources=$WORKSPACE/
RPM包安装后,位置是/var/lib/jenkins/workspace/
项目都会下载到这里
sonar.projectName=ding
项目名称,回去里面读src
sonar.projectKey=ding
唯一的项目Key,SonarQube Server上作为唯一标识,生成链接
sonar.projectVersion=1.0
版本:不太理解,强制要求
sonar.sourceEncoding=UTF-8
开发代码字符集
```
参考链接:https://docs.SonarQube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
### 故障处理
#### 故障1:项目中配置SonarQube Scanner的Task to run为ding,就报这个错,去掉就可以了
```shell
13:53:22.236 ERROR: Error during SonarQube Scanner execution
Task 'ding' does not exist. Please use 'list' task to see all available tasks.
13:53:22.236 DEBUG: Execution getVersion
13:53:22.236 DEBUG: Execution stop
ERROR: SonarQube scanner exited with non-zero code: 1
Sending e-mails to: dinghe@ding.com
Finished: FAILURE
```
**解决** 去掉SonarQube Scanner的Task to run中的内容
#### 故障2: E170001
**报错**
```shell
Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Authentication required for '<http://192.168.0.250:80> VisualSVN Server'
```
**解决:** 登录SonarQube Server-->配置-->SCM-->设置为是(关闭SCM)
#### 故障2:SonarQube安装完后出现SonarQube is under maintenance. Please check back later.
```shell
SonarQube在安装完后运行:192.168.0.235:9000出现如下提示
SonarQube is under maintenance. Please check back later.
Whilst waiting, you might want to check new plugins to extend the current functionality.
If you are an administrator and have no idea why this message is showing, you should read the upgrade guide
这个需要安装完后先运行http://192.168.0.235:9000/setup 更新下 SonarQube
```
- 献给乐于奉献的你
- 一、工作感悟
- 1.1 工作感悟
- 1.2 数据库工作总结
- 二、运维专题(非技术)
- 2.1 公有云运维
- 2.1.1 阿里云采坑记.md
- 三、运维专题(技术类)
- 3.1 Linux(操作系统)
- 3.1.1 常见工作总结
- 3.1.2 常见服务使用和部署
- 3.1.3 操作系统优化
- 3.1.4 常用命令(Centos8)
- 3.2 Docker & K8s(容器技术)
- 3.2.1 Docker
- 1. Docker
- 1-1 容器基础
- 1-2 部署和加速
- 1-3 常用命令
- 1-4 Dockerfile编写
- 1-5 容器网络
- 1-6 数据持久化
- 2. docker-compose
- 2-1 基础
- 3.2.2 kubernetes
- 1. 导读-请先看我
- 2. kubeadm部署集群
- 1-1 k8s-1.14-基于calico
- 1-2 k8s-1.17-基于flanne
- 3. 二进制部署集群
- 4. 日常工作及故障处理
- 4-1 常用命令
- 4-2 故障处理
- 3.2.3 依赖服务部署
- 1. Harbor(镜像仓库)
- 1-1 harbor-2.1.0(单节点)
- 3.3 CICD(持续集成/部署)
- 3.3.1 GitLab
- 1. 服务部署
- 1-1 Gitlab-CE-13.3.4(单节点)
- 2. Git基础
- 3.3.2 Ansible
- 1. 服务部署
- 1-2 ansible-2.5(pip部署)
- 3. ansible-playbook
- 3-1 基于Roles的Playbook
- 3-3 循环语法
- 3.3.3 Jnekins
- 1. Jenkins部署
- 1-1 Jenkins-2.65部署
- 1-2 Jenkins-2.249部署
- 2. Jenkins项目初始化
- 3. Jenkins集成
- 3-1 Jenkins-2.65集成Sonar
- 3.4 LB/HA(负载均衡,反向代理)
- 3.4.1 LVS+Keepalive
- 1. LVS为MySQL读提供负载均衡
- 3.4.2 Pacemaker(HA)
- 1. 常用命令(转)
- 3.5 Runtime(代码运行环境)
- 3.5.1 Tomcat(Web中间件)
- 1. Tomcat部署手册
- 1-1 Tomcat-7.0.76部署
- 2. Tomcat常用脚本
- 3.6 NoSQL(非关系型数据库)
- 3.6.1 redis(非关系数据库)
- 1. Redis 基础
- 2. Redis 4.0变化
- 3. Codis实现Redis的集群
- 4. Redis故障处理
- 5. redis安全第一步
- 6. Redis集群搭建
- 7. CacheCloud部署
- 3.6.1 Redis挑战
- 3.6.2 MongoDB(文档数据库)
- 1. Mongodb基础
- 1-1 Mongodb4.0新特性
- 1-2 支持多大数据量
- 2. Mongodb安装
- 2-1 Mac OS安装Mongodb
- 2-2 Yum安装Mongodb
- 2-3 二进制安装Mongodb
- 2-4 docker容器安装Mongodb
- 2-5 Mongodb 配置文件详解
- 2-6 Mongodb 生产安全清单
- 2-7 用户身份认证和授权
- 3. Mongodb副本集
- 3-1 副本集搭建
- 3-2 用户身份认证与授权
- 4. 日常维护工作
- 4-1 Mongodb磁盘回收
- 4-2 Mongodb备份恢复到任意时间点
- 4-3 Mongodb慢查询分析
- 4-4 Mongodb版本升级
- 4-5 Mongodb副本集成员状态
- 4-6 Mongodb备份恢复工具使用
- 4-7 Mongodb服务启动和停止
- 4-8 修改副本集成员oplog大小
- 4-9 Mongodb 副本集Oplog
- 3.7 MQ(消息队列)
- 3.7.1 Zookeeper(分布式协调系统)
- 1. ZooKeeper基础
- 2. ZooKeeper集群搭建
- 2-1 ZK-3.4.10部署
- 3.2 RabbitMQ(消息队列)
- 1. 服务部署
- 1-1 RabbitMQ-3.8部署
- 2. 常用命令
- 3.8 Monitor(数据收集,监控)
- 3.8.1 Zabbix(运维监控)
- 1. 服务部署
- 1-1 服务端部署
- 1-2 客户端部署
- 2. 监控服务
- 2-1 监控Apache
- 2-2 监控IIS
- 2-3 监控Ningx
- 2-4 监控Tomcat(6/7/8)
- 2-5 监控WebSphere 7
- 2-6 监控MySQL
- 2-7 监控Oracle
- 2-8 监控SQL Servre
- 2-9 监控Weblogic
- 2-10 监控Windows
- 2-11 自定义监控项
- 3. 告警推送
- 3-1 邮件告警
- 3-2 短信告警
- 3-3 告警推到Syslog
- 4. 日常工作
- 4-1 数据库优化(TokuDB)
- 4-2 数据库优化(分区表)
- 4-3 前端定制(Grafana)
- 5. 与Grafana结合
- 3.8.2 ELKBstack(日志收集展示)
- 1. 服务部署
- 1-1 ELK 5.5部署及配置
- 1-1-1 ELKBstack介绍
- 1-1-2 Elasticsearch部署
- 1-1-3 Logstash部署
- 1-1-4 Kibana部署
- 1-1-5 X-pack部署
- 1-1-6 Filebeat部署
- 2. ELK高级配置
- 1. Elasticsearch实战
- 2. Logstash实战
- 3. Filebeat实战
- 5. 引入队列
- 3.9 Virtualization(虚拟化)
- 3.10 Basic(基础服务)
- 3.10.1 Piwik-Matomo(用户行为分析)
- 1. Piwik前期分析
- 2. Piwik介绍和部署
- 2-1 Piwik-3.x版本(早期)
- 3. Piwik 功能配置
- 4. Piwik 模拟数据和压测
- 5. Piwik运转原理
- 6. Piwik数据库模式(一)
- 6-1 第一部分
- 6-2 第二部分
- 3.10.2 Cobbler(系统自动部署)
- 1. Cobbler 可以干什么?
- 2. Cobbler 基础原理
- 3. Cobbler 安装
- 3-1 Cobbler-2.8部署
- 4. Cobbler 基础配置
- 5. Cobbler 配置文件
- 6. 一键优化脚本
- 3.10.3 Rsync(数据同步服务)
- 1. Rsync基础
- 2. 案例:页面部署(服务端拉取)
- 3.10.4 NFS(共享存储)
- 1. NFS部署手册
- 2. 客户端NFS备份脚本
- 3.10.5 Grafana(可视化)
- 1. 安装(8.2.x)
- 3.11 Tools(软件工具)
- 3.11.1 基准测试
- 1. 基准测试方法论
- 2. 压测工具 - Siege
- 3. 压测工具 - http_load
- 3.12 DB(关系型数据库)
- 3.12.1 MySQL(关系数据库)
- 1. MySQL部署
- 1-1 MySQL-5.7部署
- 1-2 Percona-5.7 + TokuDB 部署
- 2. MySQL复制
- 2-1 MySQL异步复制
- 3. MySQL备份恢复
- 3-1 xtrabackup 备份恢复
- 4. MySQL 高可用
- 4-1 MHA(HA)
- 4-1-1 MHA 架构介绍和原理
- 4-1-2 MHA日常管理
- 4-1-3 MHA 自动Failover
- 4-1-4 MHA常用参数
- 4-1-5 MHA 报错
- 4-1-6 MHA相关配置文件和脚本
- 4-2 MyCAT
- 4-2-1 MyCAT 介绍和部署
- 4-1-3 MyCAT读写分离案例解析
- 5. MySQL 常用脚本
- 5-1 MySQL常用统计语句
- 5-2 MySQL性能分析脚本
- 6. MySQL 日常及故障处理
- 6-1 MySQL死锁排查
- 6-2 复制故障
- 6-3 MySQL 升级注意事项
- 6-3 MySQL授权
- 3.12.2 Oracle(关系数据库)
- 1. Oracle部署
- 1-1 Oracle11g单实例部署
- 1-2 Oracle12c单实例部署
- 2. Oracle常用脚本
- 3. Oracle 知识点
- 六、Ansible开源项目
- 6.1 项目初始化手册
- 6.1.1 Ansible错误处理
- 6.1.2 一种预先判断是否操作的方法
- 6.2 System初始化
- 6.3 Nginx/Tnginx部署
- 6.4 Python部署
- 6.5 PHP部署
- 6.6 MySQL部署
- 6.7 Docker部署
- 6.8 Haproxy部署
- 6.9 Redis部署
- 1. 变量和tags信息
- 3. Redis主从部署
- 4. Redis集群部署
- 5. 清理数据
- 6.10 Software软件部署
- 6.11 Zabbix部署
- 6.12 Elastic部署
- 6.13 Tomcat
- 6.14 Kafka部署
- 6.15 Zookeeper部署
- 6.16 Etcd集群部署
- 6.17 M3DB部署
- 6.18 Pormetheus部署
- 七、学习资源推荐
- 八、从瞎搞到放弃
- 8.1 CodeQL(语义代码分析引擎)
- 8.1.1 背景及计划
- 8.1.2 CodeQL概述
- 8.1.3 简单部署和使用
- 8.1.4 后续
- 8.2 dbdeployer(轻松部署MySQL)
- 归档笔记
- 三、常用服务部署(迁移中)
- 3.4 Nginx & PHP(Web服务)
- 3.4.1 Nginx(Web)
- 1. Nginx基础和部署
- 2. Nginx 我的一些思考
- 3. Nginx(Web)配置
- 4. Nginx(Proxy)配置
- 5. Nginx日常管理
- 3.4.3 PHP
- 1. PHP 7.1 部署
- 2. PHP5.6 部署
- 4. PHP原理
- 5. PHP 常用模块
- 二、运维项目实战(迁移中)
- 2.1 标准化 & 工具化项目
- 2.1.1 系统部署和优化
- 2.1.5 全网日志收集展示平台项目
- 1. 项目需求
- 2. 整体方案规划
- 3. 日志收集配置
- 4. 消息缓冲队列
- 5. 日志处理转发
- 6. 日志数据展示(待补充)
- 7. ELK安全配置(上)
- 8. ELK安全配置(下)
- 9. 项目总结
- 2.2 高性能Web项目
- 2.2.1 网站需求(完善中)