vlambda博客
学习文章列表

k8s起个sonarqube集成jenkins扫扫开发的代码

今日事儿一下开发,看看他们的代码质量如何?


搞个最新的sonarqube~先看一下效果~

sonarqube:

k8s起个sonarqube集成jenkins扫扫开发的代码点第一个

k8s起个sonarqube集成jenkins扫扫开发的代码

看一下代码详细

k8s起个sonarqube集成jenkins扫扫开发的代码

jenkins:

配好了之后多出来一个sonarqube的图标 点击就跳转到sonarqube的网址了

k8s起个sonarqube集成jenkins扫扫开发的代码


看来问题还是挺多的~~~

k8s起个sonarqube集成jenkins扫扫开发的代码


环境准备

k8s集群。没有的话看我往期文章 或者用kubeadm弄一个新版本


yaml文件

废话不多说 直接上干货

目录结构

[root@m-1-11 k8syaml]# ls -R sonarqube/
sonarqube/:
pgsql sonar

sonarqube/pgsql:
deploy.yaml

sonarqube/sonar:
deploy.yaml ingress-http.yaml

分别有两个目录 sonar和pgsql 两个目录里边分别对应的yaml文件


sonar配置 (直接复制即可)

[root@m-1-11 ]# cd sonarqube/sonar

[root@m-1-11 sonarqube]# cat deploy.yaml

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:
nodeSelector: # node选择器 可以让pod创建在固定node
type: mq # 自定义的node label
initContainers:
- name: init-sysctl
image: busybox
imagePullPolicy: IfNotPresent
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
containers:
- name: sonarqube
image: sonarqube:lts
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
resources:
limits:
cpu: 2000m
memory: 2048Mi
requests:
cpu: 1000m
memory: 1024Mi
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: /data/local/sonarqube         # 本地映射 相当于docker -v
---
apiVersion: v1
kind: Service
metadata:
name: sonarqube
namespace: devops
labels:
app: sonarqube
spec:
type: NodePort
ports:
- name: sonarqube
port: 9000
targetPort: 9000
# nodePort: 30003
protocol: TCP
selector:
app: sonarqube

sonar ingress

[root@m-1-11 sonarqube]# cat ingress-http.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonar-http
namespace: devops
spec:
rules:
- host: "sonar.pinuc.tech" # 域名自行修改
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: sonarqube # service名称和上边对应
port:
number: 9000


pgsql配置

[root@m-1-11 ]# cd ../pgsql/

[root@m-1-11 pgsql]# cat deploy.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:
nodeSelector:
type: db
containers:
- name: postgres-sonar
image: postgres:11.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: "sonarDB"
- name: POSTGRES_USER
value: "sonarUser"
- name: POSTGRES_PASSWORD
value: "123456"
resources:
limits:
cpu: 1000m
memory: 2048Mi
requests:
cpu: 500m
memory: 1024Mi
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /data/local/pgsql
---
apiVersion: v1
kind: Service
metadata:
name: postgres-sonar
namespace: devops
labels:
app: postgres-sonar
spec:
type: NodePort # 如果觉得nodeport不安全 可以用clusterip
ports:
- port: 5432
protocol: TCP
targetPort: 5432
selector:
app: postgres-sonar


创建名称空间然后创建pod,svc,ingress

kubectl create ns devops

kubectl apply -f deploy.yaml

cd ../sonar/

kubectl apply -f deploy.yaml -f ingress-http.yaml



[root@m-1-11 sonar]# kubectl get pod,svc,ing -n devops
NAME READY STATUS RESTARTS AGE
pod/postgres-sonar-6c9bf9d764-tmtwx 1/1 Running 1 10d
pod/sonarqube-5c4448c555-z2mc5 1/1 Running 0 10d

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/postgres-sonar NodePort 10.108.250.63 <none> 5432:31564/TCP 10d
service/sonarqube NodePort 10.100.247.93 <none> 9000:31532/TCP 10d

NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/sonar-http nginx sonar.pinuc.tech 192.168.1.10,192.168.1.11,192.168.1.14,192.168.1.15 80 10d


还需要内网dns解析 sonar.pinuc.tech  -->192.168.1.10

访问http://sonar.pinuc.tech/  账号密码 admin admin

k8s起个sonarqube集成jenkins扫扫开发的代码

配置

两种方式:

第一种:直接去sonarqube创建

k8s起个sonarqube集成jenkins扫扫开发的代码

k8s起个sonarqube集成jenkins扫扫开发的代码

k8s起个sonarqube集成jenkins扫扫开发的代码

k8s起个sonarqube集成jenkins扫扫开发的代码

k8s起个sonarqube集成jenkins扫扫开发的代码

把这段直接复制粘贴到jenkins 执行构建前命令

k8s起个sonarqube集成jenkins扫扫开发的代码

然后构建


第二种:用jenkins集成的sonar插件

k8s起个sonarqube集成jenkins扫扫开发的代码

配置url 

k8s起个sonarqube集成jenkins扫扫开发的代码

这个令牌我在这里拿的(感觉不对 应该是第一种的那个令牌)

这个配置不重要 (我用这种方式不走这个令牌)

(为了方便以后使用)反正我先配上了

k8s起个sonarqube集成jenkins扫扫开发的代码

然后继续 仔细看左上角 在哪配置就不教了 用过的都知道

k8s起个sonarqube集成jenkins扫扫开发的代码

进项目

k8s起个sonarqube集成jenkins扫扫开发的代码

sonar.projectKey=bi-web                    # 唯一标识

sonar.projectName=bi-web

sonar.projectVersion=1.0

sonar.sources=$WORKSPACE               

sonar.language=java

sonar.login=admin                                # 登录sonar的账号

sonar.password=xxxxxxx                        # 登录soanr的密码

sonar.java.binaries=bi-web

试了很多版本的配置 发现只有这个成功了


最后构建之后就会自动扫描了 (它会自动在sonar创建出来项目)


总体来说挺简单的~

个人亲测可用,如果有任何问题可以找我协助~