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

如何使用Gitlab CI构建Java Maven项目?,java,spring,maven,gitlab-ci,gitlab-omnibus,Java,Spring,Maven,Gitlab Ci,Gitlab Omnibus,我一直在尝试,但没有取得任何成功,我正在运行一个基于Linux的Gitlab,并试图了解CI功能 根据Gitlab文档,您只需要创建一个.Gitlab ci.yml文件,即Travis ci的Gitlab实现。现在,从外观上看,您可以使用.gitlab ci.yml完成很多工作,但是很多文档都引用了Ruby和其他语言。关于如何构建javamaven项目,没有人提及 如何用Java构建一个简单的应用程序?我可以使用共享运行程序,还是应该使用特定的运行程序,在这种情况下,我应该选择什么或哪个运行程序

我一直在尝试,但没有取得任何成功,我正在运行一个基于Linux的Gitlab,并试图了解CI功能

根据Gitlab文档,您只需要创建一个
.Gitlab ci.yml
文件,即Travis ci的Gitlab实现。现在,从外观上看,您可以使用
.gitlab ci.yml
完成很多工作,但是很多文档都引用了Ruby和其他语言。关于如何构建javamaven项目,没有人提及


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

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

那你为什么不试着从以下几点开始呢

job1:
  script: "mvn package"
假设这只在Maven已经安装的情况下才起作用,所以您需要一个支持这一点的

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

并在
.gitlab ci.yml
文件中使用其中一个,例如,
maven:3-jdk-11

image:maven:3-jdk-11
建造:
脚本:“mvn安装-B”
注意
-B
,建议非交互式使用


据我所知,运行程序是共享的还是特定的并不重要。

我使用这个命令,但一般来说,关于java/maven构建的文档似乎非常少见

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

我想在这里补充一些信息。首先,让我们澄清一些关于共享和特定跑步者的混淆

共享跑步者: 顾名思义,shared Runner是构建流程流实例,可用于执行已安装gitlab实例中启用了允许的共享Runner选项的每个项目的作业。要做到这一点,你当然需要行政管理权。根据当前的gitlab文档,只有具有管理权限的use才能定义共享运行程序

特定运行程序这种运行程序只执行一个项目的作业

此外,在为您的项目选择runner时,请记住以下几点

  • 共享跑步者对于多个项目之间具有类似要求的工作非常有用。您可以使用一个或少量的运行程序来处理多个项目,而不是让多个运行程序为许多项目闲置。这使得维护和更新通用项目集的运行程序变得更加容易
  • 特定跑步者对于有特殊要求的工作或有特定需求的项目非常有用。如果某项工作有特定的要求,您可以考虑设置特定的跑步者,而不必对所有跑步者都这样做。例如,如果要部署某个项目,可以设置特定的运行程序,使其具有此项目的正确凭据
  • 现在,要为项目选择正确的执行者,我们必须对gitlab runner的所有可用执行者进行鸟瞰,这一点非常重要。Gitlab为我们提供了很好的文档,解释了不同执行者的不同选择,从而简化了这项工作

    如果你想更多地了解跑步者和不同的遗嘱执行人,我建议你从这篇文章开始,

    我花了相当多的时间试图在Gitlab CI上设置Java项目。我在一定程度上取得了成功。如rolve所述,最直接的解决方案是使用官方回购的图像:

    但是,我们有一个公司代理,它导致我的构建在获取项目依赖项时收到超时请求。我尝试了许多解决方案,最后发现了这篇帖子:

    这篇文章本身就是关于设置maven,将下载的依赖项缓存在本地repo中,本地repo可以在构建之间访问。其思想是,您可以通过在.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/"
    
    在脚本之前:
    -回声'
    /cache/.m2
    真的
    “$PROXY_协议”
    “$PROXY_HOST”
    “$PROXY_PORT”
    '>$HOME/.m2/settings.xml
    构建调试1:
    阶段:建造
    脚本:“echo$PROXY\u主机”
    构建调试2:
    阶段:建造
    脚本:“cat$HOME/.m2/settings.xml”
    build_maven:
    阶段:建造
    脚本:“mvn$MAVEN_CLI_OPTS包”
    人工产品:
    路径:
    -target/*.jar
    部署调试单元1:
    阶段:包装
    脚本:“ls target/”
    
    请注意,构建调试作业仅用于查看是否正确插入了代理设置。通过转到Project->Settings->CI/CD Pipelines->Secret variables,可以使用Gitlab将代理环境变量设置为机密

    最后一个
    deploy\u debug
    作业是查看在目标目录中生成的内容

    只需将
    .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
    

    因此,当被问到在注册跑步者时是运行shell、ssh还是docker时,我应该选择docker,对吗?Thx,非常有效!只是一个问题:当我们在
    .gitlab ci.yml
    文件中指定图像时,在
    gitlab runner
    创建过程中指定的图像会被忽略吗?e、 我用imageubuntu:latest创建了一个runner,并用yml中的maven:3-jdk-7运行了jobfile@jeanMarcAssin关于这方面的文档有点稀疏,但是本节:和foll