在基于 docker 的 GitLab CI 设置中为 maven 存储 settings.xml 的位置

Posted

技术标签:

【中文标题】在基于 docker 的 GitLab CI 设置中为 maven 存储 settings.xml 的位置【英文标题】:Where to store settings.xml for maven in docker based GitLab CI setup 【发布时间】:2019-06-09 04:37:58 【问题描述】:

我有几个驻留在 GitLab 中的 maven 项目(不是多模块)。我喜欢为这些项目设置 GitLab CI,因此我查看了 gitlab-ci.yml 文件以了解如何执行此操作。

我找到了https://docs.gitlab.com/ee/ci/examples/artifactory_and_gitlab,它描述了将settings.xml放在项目本身中,然后在gitlab-ci文件中引用它。

但我想知道,当有多个需要此 settings.xml 的项目时如何做到这一点,因为将其多次放入存储库中似乎很糟糕。

我在本地将它放在我的 .m2 目录中,但是如何以及在何处将它放在管道的 gitlab 服务器上?

【问题讨论】:

奇怪的是,当我在 GitLab 中进行mvn deploy 测试时,它失败了` Connect to localhost:8081 [localhost/127.0.0.1] failed: Connection refused (Connection`。它尝试连接到工件 - 在我的本地 settings.xml 中配置?! 您的gitlab-runner 环境是什么?视窗? Linux?苹果?还是码头工人? (docs.gitlab.com/runner) @CharleeChitsuk 它在一个 dockers 作为运行环境的 unix 机器上 【参考方案1】:

我通过config.toml 挂载主机卷,如下例:-

concurrent = 1
check_interval = 30

[[runners]]
  name = "some-name"
  url = "url/to/gitlab/"
  token = "some-token"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "some-maven-image"
    privileged = false
    disable_cache = false
    volumes = ["...", "path/to/host/dir:/some/name:rw"]
    pull_policy = "if-not-present"
    shm_size = 0
  [runners.cache]

path/to/host/dir 是主机上的路径,其中包含许多文件,包括settings.xmlsettings-security.xml 等,根据项目要求。另一方面,/some/name 是 docker 内的一个目录。

.gitlab-ci.yml,我提供before_script,如下例:-

before_script:
  - cp -f /some/name/settings.xml  $HOME/.m2/settings.xml
  - cp -f /some/name/settings-security.xml $HOME/.m2/settings-security.xml
  - ...
after_script:
  - rm -f $HOME/.m2/settings.xml
  - rm -f $HOME/.m2/settings-security.xml
  - ...

有关config.toml的更多信息,请访问Advanced configuration。

【讨论】:

以上是关于在基于 docker 的 GitLab CI 设置中为 maven 存储 settings.xml 的位置的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建

DevOps实战-基于Docker的CI/CD

使用 Gitlab CI 时如何设置 docker 容器的主机名

基于gitlab-ci实现maven及docker缓存的配置

如何正确设置环境变量 Gitlab CI/CD 和 Docker

基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作