如何使用Gitlab CI构建Java Maven项目?

时间:2015-10-30 07:07:39

标签: java spring maven gitlab-ci gitlab-omnibus

我一直在试验没有成功,我正在运行一个在Linux上托管的Gitlab,并试图了解CI功能。

根据Gitlab文档,您只需要创建一个.gitlab-ci.yml文件,即Travis-CI的Gitlab实现。现在从它的外观来看,你可以用.gitlab-ci.yml完成很多工作,但很多文档都引用了Ruby和其他语言。关于如何构建Java Maven项目没有任何说法。

如何在Java中构建一个简单的应用程序?我可以使用共享运行器,还是应该使用特定的运行器,在这种情况下,我应该选择哪种或哪种运行器实现:ssh,docker或shell?那么,我应该在.gitlab-ci.yml文件中放入什么,至少用Maven构建项目?

6 个答案:

答案 0 :(得分:52)

Register a Docker runner并在maven:3-jdk7文件中使用official Maven Docker images之一,例如.gitlab-ci.yml

image: maven:3-jdk-7

build:
  script: "mvn install -B"

请注意-B flag,建议用于非互动用途。

据我了解,跑步者是分享还是具体并不重要。

答案 1 :(得分:4)

该文档描述了用于控制构建的YAML语法:

那你为什么不尝试从下面开始呢?:

 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 

alert = [[UIAlertView alloc]initWithTitle:@"" message:[NSString stringWithFormat:@"Reload data ?"] delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"Cancel", nil]; 


 [alert show];

 }];

据推测,只有在已安装Maven的情况下,这才有效,因此您需要runner支持此功能。

我没有使用GitLab,但documentation建议您可以进一步自定义它以使用official Maven Docker image来执行构建。看起来非常有趣,但我同意文档缺少Java示例。

答案 2 :(得分:4)

我想在这里添加一些信息。首先让我们清楚一些关于共享和特定跑步者的困惑。

共享亚军: 正如其名称一样,共享运行程序是构建流程实例,可用于执行已安装的gitlab实例中每个项目的作业,并启用允许共享运行程序选项。要做到这一点当然你需要管理权。根据当前的gitlab文档,只有使用管理权限才能定义共享运行程序。

特定跑步者这种跑步者只执行一个项目的作业。

此外,在为项目选择跑步者时,请记住这些要点。

  1. 共享运行程序对于在多个项目之间具有类似要求的作业非常有用。您可以拥有一个或多个可以处理多个项目的运行程序,而不是让多个项目的多个运行程序空闲。这样可以更轻松地维护和更新常用项目集的运行程序。
  2. 特定参与者对于具有特殊要求的作业或具有特定需求的项目非常有用。如果某个工作有某些要求,您可以考虑到这一点设置特定的跑步者,而不必为所有跑步者做这个。例如,如果要部署某个项目,可以设置特定的运行器以获得正确的凭据。
  3. 现在为项目选择正确的执行者,非常重要的是我们对gitlab runner的所有可用执行程序都有鸟瞰图。 Gitlab通过here提供了很好的文档解释了不同执行者可以获得的不同选项,使我们的工作变得轻松。

    如果您想了解更多关于跑步者和不同执行者的信息,我建议您从这篇文章开始, Gitlab Runner

答案 3 :(得分:4)

我花了相当多的时间尝试在Gitlab CI上设置我们的Java项目。我得到了一些成功的工作。如rolve所述,最直接的解决方案是使用官方仓库中的图像:https://hub.docker.com/_/maven

但是,我们有一个公司代理,它导致我的构建在获取项目的依赖项时获得超时请求。我尝试了很多解决方案,最后发现了这篇文章:https://gitlab.com/gitlab-org/gitlab-ce/issues/15167

帖子本身是关于设置maven来缓存本地仓库中下载的依赖项,可以在构建之间访问。我们的想法是您可以在 .gitlab-ci.yml 中编写本地maven配置文件来设置缓存目录和代理。

before_script:
  -echo '<settings
          xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
          https://maven.apache.org/xsd/settings-1.0.0.xsd">
          <localRepository>/cache/.m2</localRepository>
          <proxies>
              <proxy>
                  <active>true</active>
                  <protocol>'$PROXY_PROTOCOL'</protocol>
                  <host>'$PROXY_HOST'</host>
                  <port>'$PROXY_PORT'</port>
              </proxy>
          </proxies>
      </settings>' > $HOME/.m2/settings.xml

build_debug1:
  stage: build
  script: "echo $PROXY_HOST"

build_debug2:
  stage: build
  script: "cat $HOME/.m2/settings.xml"

build_maven:
  stage: build
  script: "mvn $MAVEN_CLI_OPTS package"
  artifacts:
    paths:
      - target/*.jar

deploy_debug1:
  stage: package
  script: "ls target/"

请注意,构建调试作业只是为了查看代理设置是否正确注入。您可以使用Gitlab将代理环境变量设置为秘密,方法是转到Project - &gt;设置 - &gt; CI / CD管道 - &gt;秘密变量。

最后一个deploy_debug作业是查看目标目录中生成的内容。

答案 4 :(得分:2)

我使用此命令,但一般来说,java / maven版本的文档似乎很少见

maven-package:
  script: "mvn install -B"

答案 5 :(得分:0)

借助How to deploy Maven projects to Artifactory with GitLab CI/CD

您可以通过将.gitlab-ci.yml文件添加到存储库的根目录中来编译Java maven项目,其中包含以下内容:

image: maven:latest

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

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

build:
  stage: build
  script:
    - mvn compile