gitlab CI 管道检查代码格式

Posted

技术标签:

【中文标题】gitlab CI 管道检查代码格式【英文标题】:gitlab CI pipeline to check for code formatting 【发布时间】:2020-08-04 05:45:15 【问题描述】:

我希望在我的几个项目中安装 google-java-formatter

但是,在提交代码时,我希望 CI 管道检查是否首先完成了格式化。

我知道我可以在我的根目录中使用.gitlab-ci.yml 文件来完成此操作,但是我非常不确定如何实现检查所有文件是否已正确格式化的目标,谁能帮我解决这个问题请使用google-java-formattergitlab

【问题讨论】:

如果您使用 SBT、Maven 或 Gradle,也可以使用 spotless plugin。 【参考方案1】:

google-java-formatter 用于代码格式化

由于google-java-formatter 对代码进行了修改(格式化),因此它会更改要提交的代码。

根据google-java-format源代码:

google-java-format 是一个重新格式化 Java 源代码以符合Google Java Style 的程序。

所以,你需要一个pre-commit 钩子。

例如你可以使用pre-commit - 一个用于管理和维护多语言预提交钩子的框架。

你可以看到here的示例文件

.pre-commit-hooks.yaml:


- id: eclipse-formatter
  name: Eclipse Java Formatter
  description: This hook formats Java code with the Eclipse formatter.
  entry: eclipse-formatter
  language: python
  types:
    - java
- id: google-java-formatter
  name: Google Java Formatter
  description: This hook formats Java code with Google Java Formatter.
  entry: google-java-formatter
  language: python
  types:
    - java

如果您确实想将 git 挂钩与 GitLab 集成,请尝试创建自定义 GitLab Server hook

linters 与格式化程序

如你所说:

在提交代码时,我希望 CI 管道首先检查格式化是否已完成。

你在问什么 - 是 checkstyle linting 不是 formatting 因此,要检查格式化是否已经完成,您可以使用一些 linter。

即from this answer:

SpotBugs(之前的 Findbugs)用于查找现有错误。非常好! PMD 用于查找可能导致错误的模式(例如未使用的变量) Checkstyle 强制执行编码标准和约定(例如空格、Javadoc) Error Prone 直接挂钩到您的应用程序的编译步骤

checkstyle linter 使用情况

这方面有很多指南,例如:GitLab CI/CD Pipeline for Maven-Based Applications – The Blog of Ivan Krizsan

另外,还有250+ samples of .gitlab-ci.yml 带有`checkstyle。

Client_Checkstyle:
  stage: test
  script:
    - mvn checkstyle:checkstyle
    - cat checkstyle-result.xml
  allow_failure: false

【讨论】:

我还是有点不确定如何在 gitlab 中使用它,我将这个文件添加到我的根目录,然后管道会接收这个文件吗?如果这对答案有任何影响,我正在使用 inteliJ 添加了一些链接和.gitlab-ci.yml的示例,请检查

以上是关于gitlab CI 管道检查代码格式的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI/CD 如何在管道中捕获 curl 响应

如何能够将变量传递给 gitlab ci 管道中的规则?

如何从 gitlab CI 管道中推送到仓库?

如何在 GitLab CI 的管道中将变量的值从一个作业传递到下一个作业?

如何在 Maven GitLab CI/CD 管道中将 JaCoCo 报告 HTML 转换为 PDF

触发 Gitlab CI/CD 管道以部署存储库的特定部分