GitLab Runner Maven Docker環境的應用

背景

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一致,否則會出現權限認證錯誤

打包鏡像並上傳到遠程鏡像倉庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章