Gitlab与SonarQube的集成

22

我对开发社区和DevOps实践都比较新,作为项目的一部分,我们正在尝试将SonarQube与Gitlab集成,对SonarQube和Git CI(持续集成)进行了一些研究,看起来插件已经发布在Github和SonarQube上,但没有发布在Gitlab上。

配置GitLab与SonarQube以检查每个拉取请求的代码质量有多现实?最佳实践是如何将这两个组件集成在一起?

谢谢。

5个回答

25

你其实不需要一个插件。 在你的.gitlab-ci.yml文件中编写类似于以下的内容即可:

stages: 
- build 
build_master:
  image: maven
  stage: build
  artifacts:
    paths:
    - target/*.jar
  script:
  - mvn package sonar:sonar -Dsonar.host.url=https://sonar.yourdomain.tld/ 
  only:
  - master

每一次主推都将得到测试! (这适用于一个Java项目...)


这个答案相当有限。Windows怎么样?C#或C++呢?如果不是在GitLab UI中显示分析结果,那么这两个工具中的UI链接怎么样呢? - Ivan
2
嘿伊万,我相信你也可以用同样的方法构建其他东西。 对于Windows相关的内容,上次我使用的是PowerShell镜像。 - Joergi
1
这并不容易,相信我。调用SonarQube runner只是问题的一个方面。没有任何Windows Docker镜像会安装SonarQube runner。目前没有GitLab版本允许在Windows gitlab-runner中使用Docker executor。没有免费的官方C++ SonarQube插件 - 但有很多选择。需要更多手动工作。然后是问题的另一方面 - UI集成,就像我上面提到的那样。 - Ivan

18

目前,据我所知,有两个社区驱动的插件旨在提供MR分析/与GitLab集成。

它们目前都正在经历下一个版本的反馈阶段,并且都希望通过发布进入更新中心。

使用这两个插件,您可以运行构建,在GitLab中提供新发现违规的评论。这两个插件都受SonarSource的GitHub插件的极大启发。

然而,我没有权利建议您使用哪个,因为我是第一个插件的开发人员,因此存在偏见。


感谢@Johnnei提供的资源。只有一个问题:是否可以在自由风格项目上运行其中任何一个?例如非mvn和非gitlab-CI...谢谢。 - Y-B Cause
据我所知,这两个插件都是“只是”SonarQube插件,因此只要您提供正确的属性,它们就可以与任何Sonar Scanner一起使用。 我主要使用Java/Maven和GitLab CI,因为这是我最熟悉的。 - Johnnei
只需将.gitlab-ci.yml文件正确配置即可,这与插件无关。可以查看我的回答@Johnnei和@Adi。 - Joergi
你忽略了“每个拉取请求”部分,对于标准分析,sonar-scanner确实是唯一需要的东西。 - Johnnei
1
看起来有点讽刺的是,Gabriel的插件已经迁移到了Github:https://github.com/gabrie-allaigre/sonar-gitlab-plugin PS @Johnnei:我无法访问你的Git。 - MCO
1
@MCO 目前我的大部分服务都已经停止运行。至于我的插件,我已经放弃了它。SonarQube 已经废弃了使用的 API,并且现在提供了更好的支持,其中包括他们自己的“branch-plugin”,作为开发者版的一部分。 - Johnnei

4

我也有同样的需求,这里是我实现的方法:

创建一个没有指定标签的共享类型的runner。 创建一个名为.gitlab-ci.yml的文件,并添加以下命令:

variables:
  SONAR_URL: "http://your_sonar_url"
  SONAR_LOGIN: "sonar_user_id"
  SONAR_PASSWORD: "sonar_password"

sonarqube_master_job:
  stage: test
  only:
    - master
  image: maven:3.3.9-jdk-8-alpine
  script:
    - mvn --batch-mode verify sonar:sonar -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.password=$SONAR_PASSWORD

如果您创建带有特定标记的运行程序,则需要在.gitlab-ci.yml文件中提及这些标记。您可以在此链接中获取有关添加标记的更多信息:https://forum.gitlab.com/t/activated-specific-runner-is-not-working/7002

4

可能会有一个新的选择(替代SonarQube):GitLab 13.3(2020年8月)

它并不涵盖SonarQube处理的所有内容,但可以专注于多种语言的静态代码分析的安全方面。

适用于所有人的SAST安全分析器

我们希望帮助开发人员编写更好的代码,并减少常见安全错误的担忧。静态应用程序安全测试(SAST)通过允许开发人员在提交代码时轻松识别常见的安全问题并积极缓解,有助于预防安全漏洞。作为我们社区管理承诺的一部分,我们已经将我们所有基于开源的15个SAST分析器提供给每个GitLab版本用户使用。这使得在任何18种支持的语言和框架中开发的所有GitLab用户都可以利用GitLab SAST来协助他们的项目。

入门非常简单,只需使用我们的新的指导式SAST配置体验,启用自动DevOps或将SAST配置模板添加到您的gitlab-ci.yml文件中即可。未使用终极版的客户可以通过下载SAST作业工件与生成的SAST漏洞报告进行交互。我们还更新了文档,详细介绍了所有SAST功能的版本细分

https://about.gitlab.com/images/13_3/sast-gitlab-languages.png -- SAST security analyzers available for all

请参阅文档问题

而且(与前面的部分相反,不是免费的):

引导式的SAST配置体验

GitLab的静态应用安全测试(SAST)现在支持新的引导式配置体验。启用SAST只需两个点击即可完成。我们相信安全是一个团队的努力,这种配置体验使得非CI专家更容易开始使用GitLab SAST。该工具帮助用户创建合并请求来启用SAST扫描,同时利用最佳配置实践,例如使用由GitLab管理的SAST.gitlab-ci.yml模板以及正确覆盖模板设置

由于GitLab SAST 覆盖了14个分析器中的18种语言,有很多SAST配置选项,可能难以理解和设置。这种新的引导式SAST配置体验帮助任何人开始使用SAST,并为我们介绍新的配置选项(如自定义规则集等)奠定了基础。我们还打算将这种引导式体验扩展到其他安全扫描工具

https://about.gitlab.com/images/13_3/SAST_Config_UI_13.3.png -- 引导式SAST配置体验

请参见文档问题


另请参阅 GitLab 13.5(2020年10月)

自定义SAST和Secret Detection规则

GitLab 静态应用程序安全测试(SAST)秘密检测现在支持自定义检测规则。这使得GitLab用户可以更改漏洞检测默认值,以适应其组织的偏好。SAST自定义规则集允许您排除规则并修改现有规则的行为。Secret Detection现在支持禁用现有规则并添加新的正则表达式模式,以允许检测任何类型的自定义密码。

通过向.gitlab文件夹中添加名为sast-ruleset.tomlsecret-detection-ruleset.toml的新文件来定义自定义规则集,其中包含正确符号的自定义内容。您可以在我们的SAST自定义规则集Secret Detection自定义规则集文档中了解有关此文件格式的更多信息并查看示例。我们打算在未来的.gitlab-ci.yml文件中提供导入自定义规则集的额外支持

https://about.gitlab.com/images/13_5/custom-rulesets-example-13.5.png -- Customizing SAST & Secret Detection rules

请参见文档Epic


3
以下是我为MVP所做的方式。
.gitlab-ci.yml
stages:
 - sonarqube_test

sonarqube_test:
  tags:
  - your-tag-attached-to-gitlab-runner
  stage: sonarqube_test
  script:
  - .cicd/sonarqube.sh

sonarqube.sh文件

#!/bin/bash
#
# Args: deploy.sh
#

cd ~

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip

unzip sonar-scanner-cli-3.3.0.1492-linux.zip

rm sonar-scanner-cli-3.3.0.1492-linux.zip

chmod 777 sonar-scanner-3.3.0.1492-linux/conf/sonar-scanner.properties

echo 'sonar.host.url=http://<your_sonarqube_server_url>' >> sonar-scanner-3.3.0.1492-linux/conf/sonar-scanner.properties

chmod +x sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner

sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner \
  -Dsonar.projectKey=<project_name> \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://<your_sonarqube_server_url> \
  -Dsonar.login=<token_from_gitlab_UI>


wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip This is now failing. You got any suggestions? Connecting to binaries.sonarsource.com (binaries.sonarsource.com)|91.134.125.245|:443... failed: Connection refused. - devil-0-per

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接