• devops学习(七) sonarqube 代码质检工具


    我们之前的代码都是直接推送到gitlab后通过jenkins去打包就完事了

    程序具体好不好使就看测试那边了,为了提前发现BUG我们需要一个代码质检工具sonarqube

    一、部署sonarQube 代码质检工具

     1、安装

    1. //官方地址
    2. http://sonarqube.org/
    3. //切换到我们部署devops的目录
    4. cd /apps/devops_setup/

    vi postgres-sonarQube.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: postgres-sonar
    5. namespace: devops
    6. labels:
    7. app: postgres-sonar
    8. spec:
    9. replicas: 1
    10. selector:
    11. matchLabels:
    12. app: postgres-sonar
    13. template:
    14. metadata:
    15. labels:
    16. app: postgres-sonar
    17. spec:
    18. containers:
    19. - name: postgres-sonar
    20. image: postgres:latest
    21. imagePullPolicy: IfNotPresent
    22. ports:
    23. - containerPort: 5432
    24. env:
    25. - name: POSTGRES_DB
    26. value: "sonarDB"
    27. - name: POSTGRES_USER
    28. value: "sonarUser"
    29. - name: POSTGRES_PASSWORD
    30. value: "123456"
    31. volumeMounts:
    32. - name: data
    33. mountPath: /var/lib/postgresql/data
    34. volumes:
    35. - name: data
    36. hostPath:
    37. path: /apps/devops_setup/data/postgres/data
    38. type: DirectoryOrCreate
    39. ---
    40. apiVersion: v1
    41. kind: Service
    42. metadata:
    43. name: postgres-sonar
    44. namespace: devops
    45. labels:
    46. app: postgres-sonar
    47. spec:
    48. clusterIP: None
    49. ports:
    50. - port: 5432
    51. protocol: TCP
    52. targetPort: 5432
    53. selector:
    54. app: postgres-sonar
    55. ---
    56. apiVersion: apps/v1
    57. kind: Deployment
    58. metadata:
    59. name: sonarqube
    60. namespace: devops
    61. labels:
    62. app: sonarqube
    63. spec:
    64. replicas: 1
    65. selector:
    66. matchLabels:
    67. app: sonarqube
    68. template:
    69. metadata:
    70. labels:
    71. app: sonarqube
    72. spec:
    73. initContainers:
    74. - name: init-sysctl
    75. image: busybox
    76. imagePullPolicy: IfNotPresent
    77. command: ["sysctl", "-w", "vm.max_map_count=262144"]
    78. securityContext:
    79. privileged: true
    80. dnsConfig:
    81. nameservers: ["114.114.114.114"]
    82. containers:
    83. - name: sonarqube
    84. image: sonarqube:latest
    85. ports:
    86. - containerPort: 9000
    87. env:
    88. - name: SONARQUBE_JDBC_USERNAME
    89. value: "sonarUser"
    90. - name: SONARQUBE_JDBC_PASSWORD
    91. value: "123456"
    92. - name: SONARQUBE_JDBC_URL
    93. value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"
    94. livenessProbe:
    95. httpGet:
    96. path: /sessions/new
    97. port: 9000
    98. initialDelaySeconds: 60
    99. periodSeconds: 30
    100. readinessProbe:
    101. httpGet:
    102. path: /sessions/new
    103. port: 9000
    104. initialDelaySeconds: 60
    105. periodSeconds: 30
    106. failureThreshold: 6
    107. volumeMounts:
    108. - mountPath: /opt/sonarqube/conf
    109. name: data
    110. subPath: conf
    111. - mountPath: /opt/sonarqube/data
    112. name: data
    113. subPath: data
    114. - mountPath: /opt/sonarqube/extensions
    115. name: data
    116. subPath: extensions
    117. volumes:
    118. - name: data
    119. hostPath:
    120. path: /apps/devops_setup/data/sonarqube/data
    121. type: DirectoryOrCreate
    122. ---
    123. apiVersion: v1
    124. kind: Service
    125. metadata:
    126. name: sonarqube
    127. namespace: devops
    128. labels:
    129. app: sonarqube
    130. spec:
    131. type: NodePort
    132. ports:
    133. - name: sonarqube
    134. port: 9000
    135. targetPort: 9000
    136. nodePort: 30006
    137. protocol: TCP
    138. selector:
    139. app: sonarqube

    部署

    1. kubectl apply -f postgres-sonarQube.yaml
    2. kubectl -n devops get pod

     说明

    上面sonarQube需要去公网下载插件,所以需要解析公网的dns,在上面的配置中我添加了

    1. dnsConfig:
    2. nameservers: ["114.114.114.114"]

     这样我们在启动容器时候就会自带一个公网dns解析了,不需要去挂载宿主机的解析

    前面jenkins 也可以用这种方法,因为这里需要和数据库通讯所以不用前面default模式

    这样一来,既可以用集群内部解析,也能解析到公网ip

     

    2、访问页面

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

     

    3、安装中文插件

     

    在插件安装的地方搜索chinese  点击上面的同意后install 安装

     

    4、离线安装插件

    很多情况下我们都无法直接安装插件,那么我们就只能下载下来后手动安装

    1. //插件下载地址
    2. https://github.com/xuhuisheng/sonar-l10n-zh/releases
    3. //创建插件存放目录
    4. mkdir -p /apps/devops_setup/data/sonarqube/data/extensions/plugins/
    5. cd /apps/devops_setup/data/sonarqube/data/extensions/plugins/
    6. //拉取插件包
    7. wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.5/sonar-l10n-zh-plugin-9.5.jar
    8. //删除pod重新加载即可

    二、sonarQube Scanner 代码扫描插件

    我们这里通过sonarQube Scanner工具 将我们的代码发送到sonarQkube上

    1、部署扫描插件

    1. //下载软件包
    2. cd /root
    3. wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
    4. unzip sonar-scanner-cli-4.6.0.2311-linux.zip
    5. mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner
    6. //切换到配置目录
    7. cd /root/sonar-scanner/conf/

    vi sonar-scanner.properties

    1. sonar.host.url=http://101.43.4.210:30006 //sonarQube 地址
    2. sonar.sourceEncoding=UTF-8 //取消注释

    2、挂载到jenkins

    我们将上面配置好的工具 挂载到jenkins目录中使用

     mv /root/sonar-scanner /apps/devops_setup/data/jenkins/data/

     

    3、生成sonarQube 登陆token

    我们在使用sonarQube Scanner 需要将信息发送到sonarQube中,这一步是要认证的

    得到了用户的token令牌

    squ_8413ea81b0e219590c792a7e784e55c465b716d5

     3、手动测试sonarQube Scanner

    1. //切换到我们项目代码目录
    2. cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
    3. //使用扫描工具扫描项目代码并发送到sonarQube
    4. /apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner \
    5. -Dsoanr.sources=./ \
    6. -Dsonar.projectname=linux-test \
    7. -Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5 \
    8. -Dsonar.projectKey=linux-test \
    9. -Dsonar.java.binaries=./target

    参数说明

    1. //1、指定扫描工具bin文件路径
    2. /apps/devops_setup/data/jenkins/data/sonar-scanner/bin/sonar-scanner
    3. //2、 指定要扫描的代码项目路径 这里是 ./ 当前目录
    4. -Dsoanr.sources=./
    5. //3、指定项目名称是什么,就是我们在sonarQube上看到的项目是什么
    6. -Dsonar.projectname=linux-test
    7. //4、认证token
    8. -Dsonar.login=squ_8413ea81b0e219590c792a7e784e55c465b716d5
    9. //5、项目名称key 和项目名称相同即可
    10. -Dsonar.projectKey=linux-test
    11. //6、指定项目文件打包地址,就是build地址,当前目录下的./target目录
    12. -Dsonar.java.binaries=./target

    回到sonarQube上查看

     哇咔咔,一上来就有BUG了( •̀ ω •́ )✧

     

    三、整合jenkins 与sonarQube

    1、安装SonarQube Scanner插件

    SonarQube servers

     2、配置插件发送的SonarQube地址

    这里把添加配置和添加认证信息分开,因为这里直接点添加认证容易卡死

    1. //认证类型
    2. secrets Text
    3. //token值 上面拿的
    4. squ_8413ea81b0e219590c792a7e784e55c465b716d5
    5. //描述
    6. SonarQube-token

     

    3、全局配置扫描工具路径

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

    4、配置项目中使用扫描工具

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

     

    刚才我们手动跑的时候在mytest项目下面自动创建了一个文件,先删掉在构建

    1. cd /apps/devops_setup/data/jenkins/data/workspace/mytest/
    2. rm -rf .scannerwork/

    5、构建项目测试扫描是否执行成功

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

  • 相关阅读:
    原来Python自带了数据库,用起来真方便
    vue 移动端实现自动适配 postcss-px-to-viewport
    ESPHome不经过HA设备1直接控制设备2
    Mycat分库分表
    第七篇 基于JSP 技术的网上购书系统——新品上架、推荐产品、在线留言、搜索功能实现(网上商城、仿淘宝、当当、亚马逊)
    进入数据结构的世界
    常用DOS命令、Windows下安装IIS服务器、DNS服务器和DHCP服务器以及Windows和Linux防火墙的基本配置(Windows一)
    Linux进阶-编译工具链
    服装商城网站 毕业设计-附源码241505
    HashMap关键就这几个点,你Get到了?
  • 原文地址:https://blog.csdn.net/qq_42883074/article/details/125987496