背景
Maven可作爲Java的構建環境,當Maven構建打包時,在本地會創建一個本地倉庫存放所以的依賴包,Runner運行在Docker中時,倉庫地址是在Docker容器中,當Docker容器重啓時則創建一個新的容器,原Docker中下載好的Maven依賴包全部都會丟失,所以我們將容器中的倉庫地址映射到宿主機上避免上述情況反生。
Maven倉庫映射到宿主機
GitLab Runner運行之後在config目錄下會生成config.toml
文件,修改文件裏的volumes
屬性字段,將Docker裏Maven倉庫地址映射到宿主機上,如下:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "my-runner"
url = "http://xxx.xxx.xxx.xxx/"
token = "xxxxxxxxx-"
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
tls_verify = false
image = "maven:3-jdk-8"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache","/data/maven/repository/:/root/.m2/repository:rw","/data/maven:/usr/share/maven:rw"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
在配置中/data/maven/repository/:/root/.m2/repository:rw
將Docker容器中倉庫地址/root/.m2/repository
映射到宿主機的/data/maven/repository/
的目錄。
/data/maven:/usr/share/maven:rw
將Maven環境映射到宿主機上。
Maven上傳包到遠程倉庫
Maven需要修改setting.xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>F:\work\maven_repo</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>nexus</id>
<username>repo</username>
<password>123456</password>
</server>
<!-- id與pom.xml關聯的私服id相同 -->
<server>
<id>nexus-releases</id>
<username>repo</username>
<password>123456</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>repo</username>
<password>123456</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://182.61.31.101:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
</settings>
如果自己工程編譯成jar後需要上傳到Maven私服需要在pom.xml中添加如下配置:
<distributionManagement>
<repository>
<!-- id與maven settings.xml中設置權限的id相同 -->
<id>nexus-releases</id>
<name>Internal Releases</name>
<url>http://182.61.31.101:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Internal Snapshots</name>
<url>http://182.61.31.101:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
其中repository和snapshotRepository中的id值需要與setting.xml中server的id一致,否則會出現權限認證錯誤