maven - Gitlab maven 部署到包注册表
问题描述
我正在尝试 gitlab,它看起来很有前途。我遇到了一个巨大的问题,似乎整个互联网上没有人知道如何解决这个问题。
我添加了一个项目,它是一个 maven 项目(只有一个 pom.xml),我想将它部署到包注册表中。如果我在家用电脑上执行此操作,这很简单。我只是将部署令牌添加到我的 settings.xml 并执行mvn deploy
.
我想在每次构建时对包注册表进行 maven 部署,因此当我提交并推送我的代码时,它需要构建。问题是,如何将 Deploy 令牌传递给管道?所以简而言之,我想自动部署一个 Maven 库/依赖项,以便其他项目可以使用该依赖项。这就是它应该如何工作,但是在 gitlab 中完全没有记录如何做到这一点,而且它几乎是接缝,好像这个星球上没有人这样做。
简而言之,如何将 maven 项目部署到项目/组包注册表?
解决方案
实际上gitlab 文档中有一个很好的解释。
我将简要概述此过程,但最后它只是文档的副本,但链接可以更改,也可以移动。所以以后的人会找到这个答案。
正如您在下面的解释中所看到的,您可以简单地为带有-s <file>
标志的 maven 提供 settings.xml。它允许您将基本 settings.xml 存储在实际项目中。
创建一个
ci_settings.xml
用作 Maven 的 settings.xml 文件的文件。使用您在
pom.xml
文件中定义的相同 ID 添加服务器部分。例如,使用 gitlab-maven 作为 ID:<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> <servers> <server> <id>gitlab-maven</id> <configuration> <httpHeaders> <property> <name>Job-Token</name> <value>${env.CI_JOB_TOKEN}</value> </property> </httpHeaders> </configuration> </server> </servers> </settings>
确保您的
pom.xml
文件包含以下内容。您可以让 Maven 使用 CI 环境变量,如本示例所示,也可以硬编码服务器的主机名和项目 ID。<repositories> <repository> <id>gitlab-maven</id> <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url> </repository> </repositories> <distributionManagement> <repository> <id>gitlab-maven</id> <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url> </repository> <snapshotRepository> <id>gitlab-maven</id> <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url> </snapshotRepository> </distributionManagement>
将部署作业添加到您的
.gitlab-ci.yml
文件中:deploy: image: maven:3.6-jdk-11 script: - 'mvn deploy -s ci_settings.xml'
将这些文件推送到您的存储库。
我想再次强调这是实际文档的内容,为了完整起见,我只是在这里添加了它(我不是模仿猫,不想让其他人的工作得到认可!;))