我正在试用 gitlab,它看起来非常好用。我遇到了一个大问题,好像整个互联网上都没有人知道如何解决这个问题。
我添加了一个 maven 项目(只有一个 pom.xml),我想将它部署到包注册表。如果我从家里的电脑上做这件事很简单。我只是将部署令牌添加到我的 settings.xml 并执行 mvn deploy
。
我想在每次构建时对包注册表进行 maven 部署,以便在我提交和推送需要构建的代码时。问题是,如何将 Deploy 令牌传递给管道?所以简而言之,我想自动部署一个 Maven 库/依赖项,以便其他项目可以使用该依赖项。这是它应该如何工作的,但是在 gitlab 中完全没有记录如何做到这一点,而且几乎看起来好像这个星球上没有人这样做。
简而言之,如何将 Maven 项目部署到项目/组包注册表?
答案 0 :(得分:0)
实际上,gitlab documentation 中有一个很好的解释。
我将简要概述此过程,但最终它只是文档的副本,但链接可以更改,也可以移动。所以未来人们会发现它就是这个答案。
正如您在下面的解释中看到的,您可以简单地为 maven 提供一个带有 -s <file>
标志的 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'
将这些文件推送到您的存储库。
我想再次强调这是实际文档的内容,我只是在此处添加它以保持完整性(我不是模仿猫,也不想得到其他人的认可!;))