gitlab 中的 maven settings.xml 重复

lap*_*nis 3 continuous-integration maven gitlab

我有多模块 Maven 项目。每个模块都有自己的 git repo。根据 gitlab文档,每个模块都必须有 .m2/settings.xml 文件用于 CI/CD 通过 .gitlab-ci.yml 才能工作。

我想避免在每个模块中都有相同的 .m2/settings.xml 文件。有没有办法实现这一目标?

小智 19

我为 GitLab 上的 Maven 项目找到的最方便的解决方案是使用 GitLab 11.11 中引入的File 类型的 GitLab 自定义环境变量。

如果您将 Mavensettings.xml内容存储到 GitLab 环境变量(例如名为 )MAVEN_SETTINGS_XML并将类型设置为,则这些设置将作为可访问该环境的每个构建作业中File指定的文件提供。$MAVEN_SETTINGS_XML

maven 构建可以通过使用参数-s(例如,或者在执行 maven 之前mvn clean install -s $MAVEN_SETTINGS_XML将设置复制到默认位置)来指向此设置。 我现在正在执行后者,因为 maven 有时会遇到设置路径的问题。cp $MAVEN_SETTINGS_XML ~/.m2/settings.xml

通过在所有 Maven 项目之上的GitLab 组中定义此环境变量,相同的设置也将适用于所有 Maven 项目。


Tho*_*rad 7

有几种方法可以实现这一点

  • 在网络服务器上托管 settings.xml
    您可以wget在 CI/CD 过程中通过网络服务器和它简单地提供 settings.xml 。

  • 通过 GIT 克隆文件
    正如您已经建议的那样,您可以从子模块存储库之一克隆文件。有一些方法可以只检索存储库的一部分,如本问题中所述

  • 使用具有正确 Maven 配置的自定义 docker 容器 您可以创建自己的 docker 容器映像以在 CI/CD 过程中使用。该镜像可以使用当前镜像作为基础镜像(即通过 Docker 的FROM指令)并将您自己的自定义 settings.xml 直接添加到 .m2 目录中。或者你想要的任何目录。
    这可能是最优雅的解决方案,但也是需要最多设置工作的解决方案。请参阅此资源,了解如何在 GitLab CI/CD 期间使用来自私有容器注册表的 docker 镜像。

  • 显然,您也可以将文件复制到每个存储库