我们之前的代码都是直接推送到gitlab后通过jenkins去打包就完事了
程序具体好不好使就看测试那边了,为了提前发现BUG我们需要一个代码质检工具sonarqube
- //官方地址
- http://sonarqube.org/
-
- //切换到我们部署devops的目录
- cd /apps/devops_setup/
vi postgres-sonarQube.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: postgres-sonar
- namespace: devops
- labels:
- app: postgres-sonar
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: postgres-sonar
- template:
- metadata:
- labels:
- app: postgres-sonar
- spec:
- containers:
- - name: postgres-sonar
- image: postgres:latest
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 5432
- env:
- - name: POSTGRES_DB
- value: "sonarDB"
- - name: POSTGRES_USER
- value: "sonarUser"
- - name: POSTGRES_PASSWORD
- value: "123456"
- volumeMounts:
- - name: data
- mountPath: /var/lib/postgresql/data
- volumes:
- - name: data
- hostPath:
- path: /apps/devops_setup/data/postgres/data
- type: DirectoryOrCreate
-
-
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: postgres-sonar
- namespace: devops
- labels:
- app: postgres-sonar
- spec:
- clusterIP: None
- ports:
- - port: 5432
- protocol: TCP
- targetPort: 5432
- selector:
- app: postgres-sonar
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: sonarqube
- namespace: devops
- labels:
- app: sonarqube
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: sonarqube
- template:
- metadata:
- labels:
- app: sonarqube
- spec:
- initContainers:
- - name: init-sysctl
- image: busybox
- imagePullPolicy: IfNotPresent
- command: ["sysctl", "-w", "vm.max_map_count=262144"]
- securityContext:
- privileged: true
- dnsConfig:
- nameservers: ["114.114.114.114"]
- containers:
- - name: sonarqube
- image: sonarqube:latest
- ports:
- - containerPort: 9000
- env:
- - name: SONARQUBE_JDBC_USERNAME
- value: "sonarUser"
- - name: SONARQUBE_JDBC_PASSWORD
- value: "123456"
- - name: SONARQUBE_JDBC_URL
- value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"
- livenessProbe:
- httpGet:
- path: /sessions/new
- port: 9000
- initialDelaySeconds: 60
- periodSeconds: 30
- readinessProbe:
- httpGet:
- path: /sessions/new
- port: 9000
- initialDelaySeconds: 60
- periodSeconds: 30
- failureThreshold: 6
- volumeMounts:
- - mountPath: /opt/sonarqube/conf
- name: data
- subPath: conf
- - mountPath: /opt/sonarqube/data
- name: data
- subPath: data
- - mountPath: /opt/sonarqube/extensions
- name: data
- subPath: extensions
- volumes:
- - name: data
- hostPath:
- path: /apps/devops_setup/data/sonarqube/data
- type: DirectoryOrCreate
-
-
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: sonarqube
- namespace: devops
- labels:
- app: sonarqube
- spec:
- type: NodePort
- ports:
- - name: sonarqube
- port: 9000
- targetPort: 9000
- nodePort: 30006
- protocol: TCP
- selector:
- app: sonarqube
部署
- kubectl apply -f postgres-sonarQube.yaml
- kubectl -n devops get pod

上面sonarQube需要去公网下载插件,所以需要解析公网的dns,在上面的配置中我添加了
- dnsConfig:
- nameservers: ["114.114.114.114"]
这样我们在启动容器时候就会自带一个公网dns解析了,不需要去挂载宿主机的解析
前面jenkins 也可以用这种方法,因为这里需要和数据库通讯所以不用前面default模式
这样一来,既可以用集群内部解析,也能解析到公网ip

- http://101.43.4.210:30006
-
- //这里登陆是用的默认密码,不是我们上面yaml文件中定义的密码
- admin
- admin
-
- //初次登陆时会要修改密码我这里改成
- 123456


在插件安装的地方搜索chinese 点击上面的同意后install 安装
很多情况下我们都无法直接安装插件,那么我们就只能下载下来后手动安装
- //插件下载地址
- https://github.com/xuhuisheng/sonar-l10n-zh/releases
-
-
- //创建插件存放目录
- mkdir -p /apps/devops_setup/data/sonarqube/data/extensions/plugins/
- cd /apps/devops_setup/data/sonarqube/data/extensions/plugins/
-
- //拉取插件包
- wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.5/sonar-l10n-zh-plugin-9.5.jar
-
-
- //删除pod重新加载即可
我们这里通过sonarQube Scanner工具 将我们的代码发送到sonarQkube上
- //下载软件包
- cd /root
-
- wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
-
- unzip sonar-scanner-cli-4.6.0.2311-linux.zip
-
- mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner
-
- //切换到配置目录
- cd /root/sonar-scanner/conf/
vi sonar-scanner.properties
- sonar.host.url=http://101.43.4.210:30006 //sonarQube 地址
-
- sonar.sourceEncoding=UTF-8 //取消注释
我们将上面配置好的工具 挂载到jenkins目录中使用
mv /root/sonar-scanner /apps/devops_setup/data/jenkins/data/
我们在使用sonarQube Scanner 需要将信息发送到sonarQube中,这一步是要认证的

得到了用户的token令牌
squ_8413ea81b0e219590c792a7e784e55c465b716d5
- //切换到我们项目代码目录
- cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
-
-
- //使用扫描工具扫描项目代码并发送到sonarQube
- /apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner \
- -Dsoanr.sources=./ \
- -Dsonar.projectname=linux-test \
- -Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5 \
- -Dsonar.projectKey=linux-test \
- -Dsonar.java.binaries=./target
参数说明
- //1、指定扫描工具bin文件路径
- /apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner
-
- //2、 指定要扫描的代码项目路径 这里是 ./ 当前目录
- -Dsoanr.sources=./
-
- //3、指定项目名称是什么,就是我们在sonarQube上看到的项目是什么
- -Dsonar.projectname=linux-test
-
- //4、认证token
- -Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5
-
- //5、项目名称key 和项目名称相同即可
- -Dsonar.projectKey=linux-test
-
- //6、指定项目文件打包地址,就是build地址,当前目录下的./target目录
- -Dsonar.java.binaries=./target

回到sonarQube上查看

哇咔咔,一上来就有BUG了( •̀ ω •́ )✧
1、安装SonarQube Scanner插件

SonarQube servers

这里把添加配置和添加认证信息分开,因为这里直接点添加认证容易卡死
- //认证类型
- secrets Text
-
-
- //token值 上面拿的
- squ_8413ea81b0e219590c792a7e784e55c465b716d5
-
-
- //描述
- SonarQube-token

- //名称
- sonar-scanner
-
-
- //工具路径 (我们是挂载进去的,挂载的默认路径是/var/jenkins_home/ 所以是这个路径)
- /var/jenkins_home/sonar-scanner/

- //添加构建操作--选择
- Execute SonarQube Scanner
-
- //指定JDK环境 这个是我们全局配置
- JDK
-
- //sonarQube 扫描工具命令
- //这里我们不需要带-D 开头,直接输入参数就可以了
- //这里的JOB_NAME 变量是我们jenkins项目名称的值,其他和上面我们手动跑的一样
- sonar.projectname=${JOB_NAME}
- sonar.projectKey=${JOB_NAME}
- soanr.sources=./
- sonar.java.binaries=./target

刚才我们手动跑的时候在mytest项目下面自动创建了一个文件,先删掉在构建
- cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
- rm -rf .scannerwork/

如上图,整合代码质检工具完成( ̄︶ ̄)↗