![c65c351dcdaeb8c542fb7cc0bc005031.png](https://img-blog.csdnimg.cn/img_convert/c65c351dcdaeb8c542fb7cc0bc005031.png)
![4fe14206a305fdd1bc44e84e6a7afec9.png](https://img-blog.csdnimg.cn/img_convert/4fe14206a305fdd1bc44e84e6a7afec9.png)
在持续交付标准中度量与反馈很重要,通过度量平台能够度量当前项目的交付情况开发效率等。今天给大家分享的内容是关于如何收集Jenkins流水线中的构建数据并进行分析。
本文分为3个部分,可能需要5-9分钟阅读
- 整体的架构与方案
- 技术方案
- K8S中安装部署Influxdb
- 流水线中采集发送数据
- 使用Grafana展示度量数据
1.整体架构及方案简介
整个过程:在Jenkins流水线中通过Pipeline脚本收集当前项目的构建数据(项目构建时间、单元测试结果、项目构建详细信息等指标),然后将数据通过HTTP API 存入Influxdb中,最后Grafana导入我们的数据模板进行展示。
![e136ce52c5f44837cb2163b63de092d3.png](https://img-blog.csdnimg.cn/img_convert/e136ce52c5f44837cb2163b63de092d3.png)
2.在Kubernetes中部署InfluxDB
编写yaml文件Deployment,创建一个持久化存储卷,暴露8086端口。文件已经存储在了Github中 。https://github.com/zeyangli/devops-on-k8s/blob/master/devops/influxdb.yml
---kind: DeploymentapiVersion: apps/v1metadata: labels: k8s-app: influxdb name: influxdb namespace: devopsspec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: influxdb template: metadata: labels: k8s-app: influxdb namespace: devops name: influxdb spec: containers: - name: influxdb image: influxdb:1.7.9 imagePullPolicy: IfNotPresent ports: - containerPort: 8086 name: web2 protocol: TCP resources: limits: cpu: 1000m memory: 2Gi requests: cpu: 500m memory: 512Mi volumeMounts: - name: dbhome mountPath: /var/lib/influxdb volumes: - name: dbhome hostPath: path: /data/devops/influxdb/ type: Directory---apiVersion: v1kind: Servicemetadata: name: influxdb namespace: devops labels: k8s-app: influxdbspec: selector: k8s-app: influxdb type: NodePort ports: - name: web port: 8086 targetPort: 8086 nodePort: 30086
3.Jenkins Pipeline采集数据
使用influxdb Http API,写入数据。
![e2548175ef9da2d0f7e1b414141f8d39.png](https://img-blog.csdnimg.cn/img_convert/e2548175ef9da2d0f7e1b414141f8d39.png)
![6394adee4a986bff69f88e8c385ba3f5.png](https://img-blog.csdnimg.cn/img_convert/6394adee4a986bff69f88e8c385ba3f5.png)
4.导入Grafana模板展示数据
在grafana官方找到了一个不错的模板 id为10557, 根据这个模板最终找到了作者发现是用于Github + Jenkins stage plugin使用的。具体没有深入研究,我是直接将此模板导入然后根据自己当前influxdb中的数据结构更改Select语句。最终实现相同的效果。
官方的图如下
![5f18175bcac65d617a7cee8457c98bf5.png](https://img-blog.csdnimg.cn/img_convert/5f18175bcac65d617a7cee8457c98bf5.png)
![49cba4aaef82f83f5ccdbb77e05a0d74.png](https://img-blog.csdnimg.cn/img_convert/49cba4aaef82f83f5ccdbb77e05a0d74.png)
最终我模仿的如下,主要是修改了SQL语句。
![85c1277fa4669fa9309bf45cf65b0a8f.png](https://img-blog.csdnimg.cn/img_convert/85c1277fa4669fa9309bf45cf65b0a8f.png)
![e64be6787b40d746a093bc8695993c80.png](https://img-blog.csdnimg.cn/img_convert/e64be6787b40d746a093bc8695993c80.png)
![bcdb59337efd29a971b050bdebdefcb1.png](https://img-blog.csdnimg.cn/img_convert/bcdb59337efd29a971b050bdebdefcb1.png)