官方原文
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