Maven Mirror 企业级代理加速

官方原文

Note: 本操作仅供参考,请务必阅读官方文档链接

Maven 官方仓库在境外,在内地拉取依赖包很慢,需要加速。业界的公益加速不承诺 SLA、不回源、更新不及时导致编译失败,所以需要企业级加速。

maven_central_request_forwarding功能可以在项目首次下载依赖包时把依赖包缓存到gitlab本地仓库,以后再次下载时可以直接从gitlab下载,节约编译时间。

开启 maven_central_request_forwarding功能

该功能引入于 15.4 版本,仅适用于自我管理版,不适用于SaaS。15.4版本默认是关闭状态,需要管理员开启。

进入rails控制台:


root@gitlab:/# gitlab-rails console

--------------------------------------------------------------------------------

 Ruby:         ruby 2.7.7p221 (2022-11-24 revision 168ec2b1e5) [x86_64-linux]

 GitLab:       15.7.2-jh (fa5937d0ae6) EE

 GitLab Shell: 14.14.0

 PostgreSQL:   13.8

------------------------------------------------------------[ booted in 39.55s ]

Loading production environment (Rails 6.1.6.1)

irb(main):001:0>

开启maven_central_request_forwarding功能:


irb(main):001:0> Feature.enable(:maven_central_request_forwarding)

=> true

检查是否启用了maven_central_request_forwarding功能:


irb(main):002:0> Feature.enabled?(:maven_central_request_forwarding)

=> true

关闭maven_central_request_forwarding功能:


irb(main):003:0> Feature.disable(:maven_central_request_forwarding)

=> true

设置本地Gitlab为maven镜像仓库

修改maven 配置文件 ci_settings.xml,添加mirrors配置片段,使gitlab的mirrors地址覆盖Maven Central地址,让本地Gitlab为maven镜像仓库,代替 maven-central。使用 CI 内置变量 ${CI_JOB_TOKEN} 作为 Job-Token。

  • 需要保证 services 和 mirrors 中的ID 一致

<settings>

   <servers>

     <server>

       <id>central-proxy</id>

       <configuration>

         <httpHeaders>

           <property>

             <name>Job-Token</name>

             <value>${CI_JOB_TOKEN}</value>

           </property>

         </httpHeaders>

       </configuration>

     </server>

   </servers>

   <mirrors>

     <mirror>

       <id>central-proxy</id>

       <name>GitLab proxy of central repo</name>

       <url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>

       <mirrorOf>central</mirrorOf>

     </mirror>

   </mirrors>

 </settings>

修改流水线文件

修改或创建 .gitlab-ci.yml 文件:


image: eclipse-temurin:8

compile:

 stage: build

 script:

   - ./mvnw package -Dmaven.test.skip=true -s ci_settings.xml

 artifacts:

   untracked: true

运行效果

运行流水线通过日志可以看见对应的效果。依赖包的下载地址已经更改为本地地址,且流水线运行时间缩短明显。

首次运行(截取部分日志):


Downloaded from central-proxy: http://gitlab.prstudy.top/api/v4/projects/4/packages/maven/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar (500 kB at 3.6 kB/s)

Downloaded from central-proxy: http://gitlab.prstudy.top/api/v4/projects/4/packages/maven/com/google/guava/guava/28.2-android/guava-28.2-android.jar (2.6 MB at 8.3 kB/s)

[INFO] Replacing main artifact with repackaged archive

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  21:47 min

[INFO] Finished at: 2023-01-29T09:30:32Z

[INFO] ------------------------------------------------------------------------

Uploading artifacts for successful job

00:04

Uploading artifacts...

untracked: found 7 files                          

Uploading artifacts as "archive" to coordinator... 201 Created  id=7 responseStatus=201 Created token=uJKgVFHx

Job succeeded

第二次运行(截取部分日志):


Downloaded from central-proxy: http://gitlab.prstudy.top/api/v4/projects/4/packages/maven/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar (8.8 kB at 2.0 kB/s)

Downloaded from central-proxy: http://gitlab.prstudy.top/api/v4/projects/4/packages/maven/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar (500 kB at 110 kB/s)

[INFO] Replacing main artifact with repackaged archive

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  03:28 min

[INFO] Finished at: 2023-01-29T09:54:23Z

[INFO] ------------------------------------------------------------------------

Uploading artifacts for successful job

00:03

Uploading artifacts...

untracked: found 7 files                          

Uploading artifacts as "archive" to coordinator... 201 Created  id=8 responseStatus=201 Created token=12pEJbm8

Job succeeded