gitlab CI 管道检查代码格式

     2023-03-22     17

关键词:

【中文标题】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/CD 如何在管道中捕获 curl 响应

】GitlabCI/CD如何在管道中捕获curl响应【英文标题】:GitlabCI/CDhowtocatchcurlresponseinpipeline【发布时间】:2022-01-0901:48:30【问题描述】:我有pipeline启动一些maven/java应用程序,现在我想添加test阶段,我检查应用程序是否成功启动,例... 查看详情

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

】如何从gitlabCI管道中推送到仓库?【英文标题】:HowdoIpushtoarepofromwithinagitlabCIpipeline?【发布时间】:2019-01-1321:50:32【问题描述】:在我的CI管道中,我正在生成一个工件public/graph.png,它可以可视化我的代码的某些方面。在后面... 查看详情

Gitlab-ci - 管道无法运行

】Gitlab-ci-管道无法运行【英文标题】:Gitlab-ci-PipelineFailstorun【发布时间】:2021-01-2305:36:38【问题描述】:当我尝试运行管道时出现以下错误sudo:aterminalisrequiredtoreadthepassword;eitherusethe-Soptiontoreadfromstandardinputorconfigureanaskpasshelper这... 查看详情

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

】如何能够将变量传递给gitlabci管道中的规则?【英文标题】:Howtobeabletopassvariabletorulesingitlabcipipeline?【发布时间】:2021-12-2417:30:42【问题描述】:我想在我的GitLabCI管道中使用规则来检查是否从所需的分支提交了提交,以及我... 查看详情

GitLab CI - 保持最后的管道状态

】GitLabCI-保持最后的管道状态【英文标题】:GitLabCI-Keeplastpipelinestatus【发布时间】:2021-12-1509:52:46【问题描述】:在GitLabCI中,当推送时没有作业排队时,是否可以保持最后一个管道状态?我的.gitlab-ci.yml中有这样的changes规则设... 查看详情

GitLab CI 管道阶段超时

】GitLabCI管道阶段超时【英文标题】:GitLabCIPipelineStageTimeout【发布时间】:2016-11-1902:39:41【问题描述】:我正在使用自托管GitLabCIserver(社区版v8.9.5)和gitlab-ci-multi-runner1.2.0来构建项目。我的一个管道阶段(测试)需要一段时间... 查看详情

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

】如何在MavenGitLabCI/CD管道中将JaCoCo报告HTML转换为PDF【英文标题】:HowdoIconvertJaCoCoreportHTMLtoPDFinMavenGitLabCI/CDpipeline【发布时间】:2021-12-2316:39:33【问题描述】:我正在尝试通过在CI/CD管道中转换为PDF格式来存储JaCoCo报告中的index.ht... 查看详情

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

】为合并请求触发的管道运行应用GitLabCI/CD管道更改【英文标题】:ApplyGitLabCI/CDpipelinechangesforpipelineruntriggeredbymergerequest【发布时间】:2022-01-0715:40:45【问题描述】:我通过一个新项目的repo根目录中的.gitlab-ci.yml文件在GitLab中创... 查看详情

在 GitLab CI 管道中使用 docker-compose

】在GitLabCI管道中使用docker-compose【英文标题】:Usingdocker-composeinaGitLabCIpipeline【发布时间】:2017-07-0620:00:39【问题描述】:我正在尝试使用以下.gitlab-ci.yml文件实现GitLab持续集成(CI)管道:image:docker:latest#Whenusingdind,it\'swisetousetheove... 查看详情

问:Gitlab CI 谁重试旧管道

】问:GitlabCI谁重试旧管道【英文标题】:Q:GitlabCIwhotoretryolderpipeline【发布时间】:2020-11-0419:11:01【问题描述】:我第一次在重试具有4个阶段和1个作业的旧管道时遇到故障,当管道仅重试第4步和第1步作为运行时我的.gitlab-ci.yml... 查看详情

gitlab ci 管道部署 ftp 失败

】gitlabci管道部署ftp失败【英文标题】:gitlabcipipelinefaileddeployftp【发布时间】:2020-06-1400:58:02【问题描述】:我尝试使用gitlab-ci.yml构建和推送我的react构建文件夹构建和测试通过,但部署失败,出现以下错误:如果我在我的语言... 查看详情

未能在 GitLab CI 管道中执行目标

】未能在GitLabCI管道中执行目标【英文标题】:FailedtoexecutegoalinGitLabCIPipeline【发布时间】:2021-11-0519:57:43【问题描述】:当我触发我的应用程序的构建管道时,我收到了未能执行目标错误。但是,当我在本地构建这个应用程序时... 查看详情

GitLab-CI 在管道中获取 pom 版本

】GitLab-CI在管道中获取pom版本【英文标题】:GitLab-CIgetpomversioninpipeline【发布时间】:2019-02-1019:05:39【问题描述】:我想通过gitlabCI以项目的版本作为标签来构建docker镜像:dockerbuild-tdockerimage:VERSION-IN-POM.在詹金斯的管道中,我得... 查看详情

具有复杂子文件夹的 Gitlab CI 父/子管道

】具有复杂子文件夹的GitlabCI父/子管道【英文标题】:GitlabCIparent/childpipelineswithcomplexsubfolders【发布时间】:2021-10-1021:49:23【问题描述】:我的gitlab(社区版,版本14.1.2)CI在我的monorepo上存在复杂管道的问题。我的结构是客户端... 查看详情

Gitlab-CI 又名管道依赖项中的上游触发

】Gitlab-CI又名管道依赖项中的上游触发【英文标题】:UpstreamtriggeringinGitlab-CIakapipelinedependencies【发布时间】:2020-06-1517:22:09【问题描述】:我似乎无法从这样的工具中找到最明显的CI功能:在另一个项目的管道完成后运行项目管... 查看详情

GITLAB CI 管道,仅使用 git 标签运行作业

】GITLABCI管道,仅使用git标签运行作业【英文标题】:GITLABCIpipeline,runjobonlywithgittag【发布时间】:2022-01-0318:28:31【问题描述】:需要GitLab专家的帮助。我在下面有一个以下管道。我希望“sync_s3:prod”作业只有在我推送新的git标签... 查看详情

为我的 GitLab-Server 上的每个存储库激活 CI/CD 管道

】为我的GitLab-Server上的每个存储库激活CI/CD管道【英文标题】:ActivateCI/CDpipelinesforeveryrepoonmyGitLab-Server【发布时间】:2021-07-3116:12:14【问题描述】:我希望GitLab-Server上的每个存储库都有一个特定的CI/CD管道。git/GitLab支持这样的... 查看详情

使用 Gitlab CI 管道时,作业名称中的冒号是啥意思?

】使用GitlabCI管道时,作业名称中的冒号是啥意思?【英文标题】:WhatdoescoloninjobnamemeanswhenusingGitlabCIpipeline?使用GitlabCI管道时,作业名称中的冒号是什么意思?【发布时间】:2022-01-1604:59:43【问题描述】:使用在GitLab上运行的以... 查看详情