---
layout: post
title: "2019-12-03-k8s-jenkins-sonarqube"
date: "2019-12-03 10:00:00"
category: "kubernetes"
tags: "kubernetes jenkins sonarqube"
author: duiniwukenaihe
---
* content
{:toc}
集群配置:
初始集群环境kubeadm 1.16.3
| ip | 自定义域名 | 主机名 |
| :----: | :----: | :----: |
|192.168.3.8 | master.k8s.io | k8s-vip |
|192.168.3.10 | master01.k8s.io | k8s-master-01|
|192.168.3.5 | master02.k8s.io | k8s-master-02|
|192.168.3.12 | master03.k8s.io | k8s-master-03|
|192.168.3.6 | node01.k8s.io | k8s-node-01|
|192.168.3.2 | node02.k8s.io | k8s-node-02|
|192.168.3.4 | node03.k8s.io | k8s-node-03|
# 描述背景:
> 示例过程参考http://www.mydlq.club/article/11/超级小豆丁文档进行操作,版本过程略有不同。初衷是没有进过大公司,羡慕大公司的工作流,安装下sonarqube与jenkins集成跑个测试用例自己安慰下自己......
上一张抄来的流程图
![jenkins-sonar1](https://img.yuanmabao.com/zijie/pic/2020/07/24/akk5ngsn4cr.png)
# sonarqube配置
## 1. 禁用SCM传感器
> 点击 配置—SCM—Disable the SCM Sensor 将其关闭
![jenkins-sonar2](https://img.yuanmabao.com/zijie/pic/2020/07/24/nmjerjbkyu2.png)
## 2. 安装 分析插件
> 点击配置-应用市场,搜索安装了java php js的相关插件,还安装了L10n,开始没有安装,pipeline后面编译maven示例的时候报错了,安装还是有必要的
![jenkins-sonar3](https://img.yuanmabao.com/zijie/pic/2020/07/24/gaxsmrz4qve.png)
## 2. 生成token
> token 字符串是用于 Jenkins 在执行流水线时候将待检测信息发送到 SonarQube的安全凭证。
> 点击右上角头像—我的账号—安全—生成令牌 生成验证的 Token。
![jenkins-sonar4](https://img.yuanmabao.com/zijie/pic/2020/07/24/bieughfi1c2.png)
# jenkins整合
## 1. 安装相关插件
>
Maven Integration plugin
>
Pipeline Maven Integration Plugin
>
Pipeline Utility Steps
>
SonarQube Scanner for Jenkins
>
打开 系统管理—插件管理—可选插件 输入 相关插件名称 进行插件筛选,直接安装就Ok了。
## 2. 连接sonarqube
> 点击凭据-系统-全局凭证-添加凭据-Secret text,复制sonarqube token到Secret ID,命名为sonar了 我就.
![jenkins-sonar5](https://img.yuanmabao.com/zijie/pic/2020/07/24/fpvaf3cunqn.png)
> 系统管理-系统配置-SonarQube servers,添加sonarqube service配置。name 随便命名了一个jenkins,server url,由于我的jenkins和sonarqube 在一个namespace 我直接用了service 那么 通信,server authentication 添加了上一步创建的 sonar的secret text。
![jenkins-sonar6](https://img.yuanmabao.com/zijie/pic/2020/07/24/u5gbfduwghp.png)
## 3. 配置 SonarQube Scanner 插件
>打开 系统管理—全局工具配置—SonarQube Scanner 输入 Name,选择最新版本点击自动安装即可.
![jenkins-sonar7](https://img.yuanmabao.com/zijie/pic/2020/07/24/s014aj3ovvx.png)
## 4. 配置 maven插件
打开 系统管理—全局工具配置—Maven 输入 Name,选择最新版本点击自动安装即可.(我的安装的时候一直下不下来包,就直接下载了一个最新版的包copy到了容器中的路径中去.)
![jenkins-sonar8](https://img.yuanmabao.com/zijie/pic/2020/07/24/qlh0eyyva2r.png)
# 创建pipeline流水线测试项目
## 1. 创建流水线任务
![jenkins-sonar9](https://img.yuanmabao.com/zijie/pic/2020/07/24/dnj2qx4cqtn.png)
### 2. 参数化构建流程-文本参数
```bash
名称: sonar_project_properties
默认值:
sonar.sources=src
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/classes
sonar.java.source=1.8
sonar.java.target=1.8
```
![jenkins-sonar10](https://img.yuanmabao.com/zijie/pic/2020/07/24/2kbzci423cc.png)
### 3. 创建pipeline 脚本 这里都是直接copy过来的
```bash
**// 设置超时时间为10分钟,如果未成功则结束任务
timeout(time: 600, unit: 'SECONDS') {
node () {
stage('Git 拉取阶段'){
// Git 拉取代码
git branch: "master" ,changelog: true , url: "https://github.com/a324670547/springboot-helloworld"
}
stage('Maven 编译阶段') {
// 设置 Maven 工具,引用先前全局工具配置中设置工具的名称
def m3 = tool name: 'maven'
// 执行 Maven 命令
sh "${m3}/bin/mvn -B -e clean install -Dmaven.test.skip=true"
}
stage('SonarQube 扫描阶段'){
// 读取maven变量
pom = readMavenPom file: "./pom.xml"
// 创建SonarQube配置文件
writeFile file: 'sonar-project.properties',
text: """sonar.projectKey=${pom.artifactId}:${pom.version}n"""
"""sonar.projectName=${pom.artifactId}n"""
"""sonar.projectVersion=${pom.version}n"""
"""${sonar_project_properties}"""
// 设置 SonarQube 代码扫描工具,引用先前全局工具配置中设置工具的名称
def sonarqubeScanner = tool name: 'sonar-scanner'
// 设置 SonarQube 环境,其中参数设置为之前系统设置中SonarQuke服务器配置的 Name
withSonarQubeEnv('jenkins') {
// 执行代码扫描
sh "${sonarqubeScanner}/bin/sonar-scanner"
}
}
}
}**
```
![jenkins-sonar11](https://img.yuanmabao.com/zijie/pic/2020/07/24/1kmv2p04gbf.png)
### 4. 执行jenkins任务构建
>点击 Build with Parameters 执行 Jenkins 任务,由于插件安装不完整,sonarqube 少安装了L10n插件,开始失败率 好多次。等待确认成功
![jenkins-sonar12](https://img.yuanmabao.com/zijie/pic/2020/07/24/amw1i5w2ynf.png)
# 登陆sonarqube查看扫描结果.
![jenkins-sonar13](https://img.yuanmabao.com/zijie/pic/2020/07/24/4t4q0vk23py.png)
> 总结:流程算是草草完成,还有很多不明白的地方,因为工作环境都是php,也没有成熟的发布流程,对java的maven构建还是很陌生。而且sonarqube的配置还是十分不熟悉。后续先搞明白下sonarqube的各种配置设置参数,系统的看下maven gradle这些主流的java构建工具。