如何使用Kubernetes运行程序在Gitlab中为Maven添加持久卷

时间:2019-04-18 07:24:37

标签: maven docker kubernetes gitlab

情况:

  • 服务器A:我们在容器中运行Gitlab。
  • 服务器B:我们有Kubernetes。

Gitlab使用Kubernetes运行程序。然后,我们的一些项目使用带有Git和Maven的docker容器构建应用程序。

Maven总是必须将各种东西下载到它的/root/.m2缓存中。 我需要做的是创建一个可以供这些作业使用的持久卷,因此,一旦下载了该卷,就不必在每次有人要构建或测试某些东西时都再次执行该操作。这些容器始终使用一个预制的映像重新构建。

相当基本的东西,除了我对Gitlab和Kubernetes绝对陌生。

我需要在哪里创建卷?我试图在运行程序中更改config.toml以包含host_path类型的卷,但我不知道我是否成功,并且Maven当然必须每次都下载所有要求。我什至不知道是否必须重新启动运行器容器才能应用更改,以及如何更改。 这是跑步者的config.toml:

listen_address = "[::]:9252"
concurrent = 4
check_interval = 3
log_level = "info"

[session_server]
  session_timeout = 1800

[[runners]]
  name = "runner-gitlab-runner-c55d9bf98-2nn7c"
  url = "https://private_network:8443/"
  token = "yeah, token"
  executor = "kubernetes"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.kubernetes]
    host = ""
    bearer_token_overwrite_allowed = false
    image = "ubuntu:16.04"
    namespace = "gitlab-managed-apps"
    namespace_overwrite_allowed = ""
    privileged = true
    service_account_overwrite_allowed = ""
    pod_annotations_overwrite_allowed = ""
    [runners.kubernetes.volumes.host_path]
      name = "maven-volume"
      mount_path = "/root/.m2"
      read_only = false

我不了解我所缺少的。也许我必须在那些项目中的.gitlab-ci.yml中定义某些内容或其他内容。我看过教程,尝试过Gitlab帮助页面,但仍然找不到有效的解决方案。

正在运行GitLab社区版11.6.5。

2 个答案:

答案 0 :(得分:1)

我会在每个项目中使用单独的缓存,在您的构建配置中使用它

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=./.m2/repository"
cache:
  paths:
    - ./.m2/repository
  # share cache across branches
  key: "$CI_BUILD_REF_NAME"

这可以防止不同项目构建之间的干扰。 您可以从gitlab专家那里找到参考配置:https://gitlab.com/gitlab-org/gitlab-ci-yml/blob/master/Maven.gitlab-ci.yml

答案 1 :(得分:1)

1)创建一个Kubernetes PersistentVolume(我使用NFS作为PersistentVolume类型):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlabrunner-nfs-volume
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 15Gi
  mountOptions:
  - nolock
  nfs:
    path: /kubernetes/maven/
    server: NFS_SERVER_IP
  persistentVolumeReclaimPolicy: Recycle

2)创建一个Kubernetes PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gitlabrunner-claim
  namespace: gitlab
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  volumeName: gitlabrunner-nfs-volume
status:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 15Gi

3)在您的config.toml中引用PersistentVolumeClaim:

   [[runners.kubernetes.volumes.pvc]]
     mount_path = "/cache/maven.repository"
     name = "gitlabrunner-claim"

这使每次使用此配置启动容器时都可以装入卷。

4)在.gitlab-ci.yml文件中,将MVN_OPTS设置为@thomas回答:

variables:
  MVN_OPTS: "-Dmaven.repo.local=/cache/maven.repository"