java - 激活 Gitlab 以构建项目并运行测试的 .gitlab-ci.yml 文件应该是什么?

标签 java gradle gitlab gitlab-ci gitlab-ci-runner

我有一个驻留在 Gitlab 中的 Gradle Java 11 项目。 我想引入 gitlab-ci.yml 以强制 Gitlab 构建项目并在每次推送到远程分支时运行测试。

它应该是什么样子的?

我很确定已经有人问过类似的问题,但我找不到它,所以非常感谢你的帮助。

最佳答案

Gitlab 提供了一个 official description .gitlab-ci.yml 文件,但从一开始就可能有点冗长。对于基础项目,您可以使用以下内容作为基础:

image: gradle:jdk11

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

cache:
  paths:
    - .gradle/wrapper
    - .gradle/caches

package:
  stage: build
  script:
    - ./gradlew assemble

test:
  stage: test
  script:
    - ./gradlew check

请注意,在许多示例中,image 标记设置为 maven:latest,但为了让 Gitlab 使用 JDK 11 编译项目,image 标签必须设置为 maven:3-jdk-11GRADLE_USER_HOME 设置为读取脚本的当前目录的 .gradle,以确保在开始构建之前正确配置 Gradle 环境。

cache 部分定义了 Gitlab CI 应该查找缓存工件和依赖项的路径(对于 Gradle 构建,是 .gradle/wrapper .gradle/缓存)。构建可能需要很长时间才能执行,因为每次构建都需要在每次执行构建时下载所有依赖项;为了加快速度,可以包含缓存以消除重复下载依赖项的需要。缓存的细节可能因您的项目而异。查看official cache documentation获取更多信息。

assemblecheck 步骤分别简单地运行gradle assemblegradle check。虽然 gradle test 在许多情况下就足够了(与 gradle check 相反,check 步骤包括 test 而还包括其他验证步骤。有关 checktest 之间区别的更多信息,请参阅 Gradle difference between test and check

有关详细信息,请参阅以下内容:


等效的 Maven 示例:

image: maven:3-jdk-11

variables:
  MAVEN_CLI_OPTS: "--batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/
    - target/

package:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS package

test:
  stage: test
  script:
    - mvn $MAVEN_CLI_OPTS test

--batch-mode 标志以默认值运行 Maven,并且不会提示用户选择任何默认值。 -Dmaven.repo.local=.m2/repository 将本地存储库设置为构建服务器 (Gitlab) 上的位置。这发挥了 Gitlab 的缓存能力。构建可能需要很长时间才能执行,因为每次构建都需要在每次执行构建时下载所有依赖项;为了加快速度,可以包含缓存以消除重复下载依赖项的需要。缓存的细节可能因您的项目而异。查看official cache documentation获取更多信息。

packagetest 步骤分别简单地运行 mvn packagemvn test(使用 Maven 选项如上所述)。

关于java - 激活 Gitlab 以构建项目并运行测试的 .gitlab-ci.yml 文件应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54058042/

相关文章:

java - 如何修复 'Method is undefined for type'错误

java - 当从另一个对话框调用对话框时,软键盘不会在对话框关闭时隐藏

GitLab 5.0 : Git push via SSH fails, 但 HTTPS 或直接 SSH 连接没有错误

Android Studio 终端无法将 gradle 识别为命令

android - 如何在gradle命令行中添加参数并在build.gradle中使用它?

Gitlab 仓库不存在问题

GitLab 无法自动 merge 。 merge 请求包含必须解决的 merge 冲突

java - 有时 ArrayIndexOutOfBoundsException,有时代码运行完美?

java - weblogic中如何配置集群地址

spring-boot - 运行gradle生成的脚本并运行Kotlin Spring-Boot运行时出错