在 gitlab-ci 中运行声纳扫描仪

Posted

技术标签:

【中文标题】在 gitlab-ci 中运行声纳扫描仪【英文标题】:Running Sonar Scanner in gitlab-ci 【发布时间】:2020-08-30 06:59:34 【问题描述】:

我正在尝试为 python 应用程序构建一个运行 sonarqube 的管道。这是我第一次使用 gitlab-ci,所以我希望能得到一些指导。我知道要运行 sonarqube,您必须以某种方式在 yml 中调用声纳扫描仪。那就是我卡住的地方。如何在我的 docker 中设置/安装声纳扫描仪?我正在运行一个带有 python 图像的 docker。任何帮助将不胜感激。老实说,我不明白本地下载声纳扫描仪包的意义。 git 管道是否默认查看本地计算机上安装的包?

【问题讨论】:

【参考方案1】:

有两种解决方案:

    您可以使用 SonarScanner Documentaion 在本地机器上安装 sonar-scanner 由于 sonar-scanner 需要在机器上安装 Java-11,您必须使用 安装 openjdk-11-jdk-headless
   sudo apt install openjdk-11-jdk-headless

并使用文档中提供的步骤在您的机器上安装声纳扫描仪。 2. 您可以使用安装了 sonar-scanner 的 docker 镜像作为基础镜像,并使用该镜像构建您自己的带有所需 python 版本和所需软件的 docker 镜像。

例如,您可以使用以下 docker 镜像作为您的 docker 镜像的参考镜像

   bluelabseu/sonar-scanner:4.3.0-7879

使用声纳扫描仪图像为 python 项目创建图像的示例 docker 文件。

    FROM bluelabseu/sonar-scanner:4.3.0-7248`
    RUN apt-get update && apt-get install python2.7 -y && apt-get install python3.6 -y

一旦你有一个 docker 文件,使用它来创建一个 docker 镜像并将它上传到你的项目存储库的 gitlab-container 注册表。

在 python 项目中使用声纳扫描仪:

    如果您想将代码覆盖率和代码质量发布到 sonarqube,您必须生成可由任何构建工具生成的测试覆盖率文件。

    在 sonarqube 管理中添加 python 配置文件的覆盖率报告路径。可以这样设置:

    一个。使用管理员用户登录 sonarqube 服务器。

    b.转到管理-> 配置-> python -> 测试和覆盖率-> 覆盖率报告的路径。将coverage-reports/*coverage-*.xml 设置为sonar.python.coverage.reportPaths 键的覆盖路径。

    例如使用诗歌构建工具生成测试覆盖率报告 poetry run py.test tests/ --cov=<PROJECT_PACKAGE_NAME>/ --cov-report xml:coverage-reports/coverage-result.xml

    在您的

    上执行以下命令
    sonar-scanner -Dsonar.coverage.exclusions=tests/** -Dsonar.python.coverage.reportPaths=coverage-reports/coverage-reports.xml  -Dsonar.projectKey=<PROJECT_NAME> -Dsonar.projectName=<PROJECT_NAME> -Dsonar.projectVersion=<<PROJECT_VERSION>  -Dsonar.sources=<PROJECT_PACKAGE_NAME> -Dsonar.tests=tests/  -Dsonar.sourceEncoding=UTF-8 -Dsonar.host.url=<SONAR_HOST_SERVER_URL> -Dsonar.login=<SONAR_AUTH_TOKEN>

注意:最好不要在 sonar-scanner.properties 文件中设置任何配置,并在命令本身中使用 -D 参数提供配置

【讨论】:

以上是关于在 gitlab-ci 中运行声纳扫描仪的主要内容,如果未能解决你的问题,请参考以下文章

从 setup.py 运行声纳扫描仪

使用 .net 核心声纳扫描仪将声纳结果发布到 tfs 构建

将 project.properties 文件传递​​给声纳扫描仪

Sonarqube 与声纳扫描仪

运行声纳扫描仪时出错:java.lang.NoClassDefFoundError: org/sonar/batch/bootstrapper/LogOutput$Level

在竹子中配置声纳