在kubernetes中部署sonarqube,Jenkins pipeline+sonar+python自动化测试和代码质量检测

作者: root007 分类: jenkins 发布时间: 2019-09-18 18:33

SonarQube是一个开源的代码质量管理平台,它可以扫描出我们代码中的一些bug、重复代码、单元测试覆盖率等问题。Sonar对应有服务端和客户端,服务端需要我们安装Sonar Server,而客户端通过Sonar Scanner进行项目源码扫描,然后上传导Sonar Server中。Sonar的整体架构如下图:

在这里插入图片描述


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sonar
spec:
  replicas: 1
  template:
    metadata:
      name: sonar
      labels:
        name: sonar
        app: sonar
    spec:
      containers:
        - image: sonarqube:lts
          name: sonar
          env:
            - name: SONARQUBE_JDBC_USERNAME
              value: sonar
            - name: SONARQUBE_JDBC_PASSWORD
              value: sonar
            - name: SONARQUBE_JDBC_URL
              value: jdbc:postgresql://xxx:1543/sonar
          ports:
            - containerPort: 9000
              name: sonar
          volumeMounts:
            - name: sonarqube-extensions
              mountPath: /opt/sonarqube/extensions
            - name: sonarqube-data
              mountPath: /opt/sonarqube/data
      volumes:
        - name: sonarqube-extensions
          nfs:
            server: ""
            path: "/sonarqube/extensions"
            readOnly: false
        - name: sonarqube-data
          nfs:
            server: ""
            path: "/sonarqube/data"
            readOnly: false 
---
apiVersion: v1
kind: Service
metadata:
  name: sonar
  labels:
    name: sonar
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9000
  selector:
    app: sonar
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sonar
spec:
  rules:
  - host: sonar.xxx.com
    http:
      paths:
      - path: /
        backend:
          serviceName: sonar
          servicePort: 80

jenkins配置部分

安装插件

配置 SonarScanner 

配置sonarQubeService 添加secret

配置项目

https://github.com/saurabhjuneja/sonar-example  

https://github.com/zbbkeepgoing/pipeline-sample


在要检查的代码工程目录下创建文件sonar-project.properties文件复制一下内容修改

# Required metadata
sonar.projectKey=org.codehaus.sonar:python-simple-sonar-runner
sonar.projectName=mx_company_data_server
sonar.projectVersion=sonar_dev_v1

# Comma-separated paths to directories with sources (required)
sonar.sources=./
# Language
sonar.language=py
# Encoding of the source files
sonar.sourceEncoding=UTF-8
#pylint
sonar.python.pylint.reportPath=pylint-report.txt
#coverage
sonar.python.coverage.reportPath=*coverage-*.xml
sonar.python.xunit.reportPath=nosetests.xml
sonar.python.xunit.skipDetails=true

修改新增pipeline

    stage('SonarQube analysis') {
        def sonarqubeScannerHome = tool name: 'SonarQube4.0'

        withSonarQubeEnv('SonarQube') {
            sh "${sonarqubeScannerHome}/bin/sonar-scanner"
        }
    }



Pylint报告

    Pylint是一个Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准和有潜在问题的代码。安装方法为:“pip install pylint”,命令行生成报告的方法为:

pylint <module_or_package> -r n --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" > <report_file>

https://docs.sonarqube.org/latest/analysis/languages/python/

  • Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。
  • Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。
  • 如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
  • 目前在 eclipse 的 pydev 插件中也集成了 Pylint。

https://docs.sonarqube.org/latest/analysis/analysis-parameters/

https://docs.sonarqube.org/display/SONARQUBE44/Python+Plugin

覆盖率报告

https://docs.sonarqube.org/latest/analysis/coverage/

coverage erase
coverage run --branch --source=<python packages> <program> 
coverage xml -i

单元测试报告

 Python里单元测试报告要借助nose,连接为:https://nose.readthedocs.io/en/latest/  该连接里都有具体的安装说明,生成单元测试报告的方法为:

nosetests --with-xunit [tests to execute]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注