Gitlab maven 部署到包注册表

时间:2021-01-06 11:56:02

标签: maven gitlab

我正在试用 gitlab,它看起来非常好用。我遇到了一个大问题,好像整个互联网上都没有人知道如何解决这个问题。

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

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

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

1 个答案:

答案 0 :(得分:0)

实际上,gitlab documentation 中有一个很好的解释。

我将简要概述此过程,但最终它只是文档的副本,但链接可以更改,也可以移动。所以未来人们会发现它就是这个答案。

正如您在下面的解释中看到的,您可以简单地为 maven 提供一个带有 -s <file> 标志的 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. 将这些文件推送到您的存储库。

我想再次强调这是实际文档的内容,我只是在此处添加它以保持完整性(我不是模仿猫,也不想得到其他人的认可!;))