首页 > 解决方案 > Gitlab maven 部署到包注册表

问题描述

我正在尝试 gitlab,它看起来很有前途。我遇到了一个巨大的问题,似乎整个互联网上没有人知道如何解决这个问题。

我添加了一个项目,它是一个 maven 项目(只有一个 pom.xml),我想将它部署到包注册表中。如果我在家用电脑上执行此操作,这很简单。我只是将部署令牌添加到我的 settings.xml 并执行mvn deploy.

我想在每次构建时对包注册表进行 maven 部署,因此当我提交并推送我的代码时,它需要构建。问题是,如何将 Deploy 令牌传递给管道?所以简而言之,我想自动部署一个 Maven 库/依赖项,以便其他项目可以使用该依赖项。这就是它应该如何工作,但是在 gitlab 中完全没有记录如何做到这一点,而且它几乎是接缝,好像这个星球上没有人这样做。

简而言之,如何将 maven 项目部署到项目/组包注册表?

标签: mavengitlab

解决方案


实际上gitlab 文档中有一个很好的解释。

我将简要概述此过程,但最后它只是文档的副本,但链接可以更改,也可以移动。所以以后的人会找到这个答案。

正如您在下面的解释中所看到的,您可以简单地为带有-s <file>标志的 maven 提供 settings.xml。它允许您将基本 settings.xml 存储在实际项目中。

  1. 创建一个ci_settings.xml用作 Maven 的 settings.xml 文件的文件。

  2. 使用您在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>
    
  3. 确保您的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>
    
  4. 将部署作业添加到您的.gitlab-ci.yml文件中:

     deploy:
       image: maven:3.6-jdk-11
       script:
         - 'mvn deploy -s ci_settings.xml'
    
  5. 将这些文件推送到您的存储库。

我想再次强调这是实际文档的内容,为了完整起见,我只是在这里添加了它(我不是模仿猫,不想让其他人的工作得到认可!;))


推荐阅读