Как добавить постоянный объем для Maven в Gitlab с бегуном Kubernetes - PullRequest
1 голос
/ 18 апреля 2019

Ситуация:

  • сервер A: мы запускаем Gitlab в контейнере.
  • сервер B: у нас есть Kubernetes.

Gitlab использует бегуна Kubernetes. Некоторые из наших проектов затем создают приложения, используя Docker-контейнер с Git и Maven.

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 Community Edition 11.6.5.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

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) Обратитесь к PersistentVolumeClaim в вашем config.toml:

   [[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"
1 голос
/ 18 апреля 2019

Я бы использовал отдельный кеш для каждого проекта, используя это в конфигурации вашей сборки

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...