如何使用Gitlab CI构build一个Java Maven项目?

我一直在试验没有取得任何成功,我正在运行一个Linux上的Gitlab,并试图让我的脑海中的CIfunction。

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

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

注册一个Docker runner并使用官方的Maven Docker镜像 ,例如,在.gitlab-ci.yml文件中使用maven:3-jdk7

 image: maven:3-jdk-7 build: script: "mvn install -B" 

注意-B 标志 ,推荐用于非交互式使用。

据我所知,运动员是共享的还是具体的并不重要。

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

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

 job1: script: "mvn package" 

大概这只会在Maven已经安装时才​​起作用,所以你需要一个支持这个的跑步者 。

我没有使用GitLab,但文档build议你可以进一步定制它,使用官方的Maven Docker镜像来执行构build。 看起来很有趣,但我同意文档缺less一个Java示例。

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

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

特定运动员这种运动员只执行一个项目的工作。

而且,在为您的项目select跑步者时,请牢记这几点。

  1. 共享运行程序对于多个项目之间具有相似要求的作业很有 。 许多项目没有让多个跑步者空转,你可以有一个或less数跑步者来处理多个项目。 这使得维护和更新常用项目的运行者更容易。
  2. 具体的参赛者对于有特殊要求的工作或有具体需求的项目是有用的。 如果一个工作有一定的要求,你可以设置一个特定的跑步者,而不必为所有跑步者做这个。 例如,如果你想部署一个特定的项目,你可以设置一个特定的运行者来获得正确的证书。

现在要为项目select正确的执行程序,对于gitlab runner的所有可用执行程序,我们都有鸟瞰的重要性。 Gitlab通过在这里提供很好的文档解释了不同的执行者可以获得的不同选项,从而使我们的工作变得简单。

如果你想了解更多关于跑步者和不同的执行者,我build议你从这篇文章, Gitlab亚军开始

我使用这个命令,但通常在java / maven构build文档似乎相当罕见

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

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

但是,我们有一个公司代理,这导致我的构build在获取项目的依赖关系时获取超时请求。 我尝试了很多解决scheme,最后碰到这个post: https : //gitlab.com/gitlab-org/gitlab-ce/issues/15167 。

这个post本身是关于设置maven来caching下载的依赖关系在一个本地回购,可以访问构build。 这个想法是你可以通过.gitlab-ci.yml编写一个本地mavenconfiguration文件来设置你的caching目录和你的代理。

 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/" 

注意生成debugging作业只是看是否正确注入代理设置。 您可以通过转到Project – > Settings – > CI / CD Pipelines – > Secret Variables,使用Gitlab将代理环境variables设置为秘密。

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