### 理論知識
#### 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 網站需求(完善中)