情况:
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 Community Edition 11.6.5。
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文件中,设置像@thomas一样回答的MVN_OPTS:
variables:
MVN_OPTS: "-Dmaven.repo.local=/cache/maven.repository"
我会在每个项目中使用一个单独的缓存,在构建配置中使用它
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