当前位置: 首页 > 面试题库 >

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

刘奇
2023-03-14
问题内容

情况:

  • 服务器-答:我们在容器中运行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。


问题答案:

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"


 类似资料:
  • 问题内容: 在Debian服务器上,我安装了Node.js。我了解如何使用以下命令行从腻子启动应用程序: 并通过地址(IP和端口)访问它。 但是,一旦我关闭腻子,那我就无法到达地址了。 如何使Node.js应用程序永久运行? 如您所料,我是Linux和Node.js的初学者。 问题答案: 尽管其他答案解决了OP的问题,但它们都是过大的,不能解释为什么他或她遇到此问题。 关键是这一行,“我关闭油灰,

  • 我想运行perl6/raku Cro应用程序,作为前端Web服务器后面的服务。 只是运行不会处理分段错误后的重新启动 以前在perl5中,我使用过FastCGI-但是的惯用语看起来不兼容FastCGI::Native的示例。 由确实有一个处理程序,但是我不确定这是否足以在服务中指向它,即。 人们目前如何托管Cro应用程序?

  • 问题内容: 我试图在将Hibernate与PostgreSQL数据库结合使用以实现持久性的同时使用Maven开发Java应用程序。我不明白如何将PostgreSQL驱动程序连接到我的应用程序。我知道您在Maven的pom.xml文件中添加了依赖项,该文件从远程存储库中查找jar,但是其他jar呢? 问题答案: PostgreSQL驱动程序jars包含在Maven的中央存储库中: 包含的Postgr

  • 我有一个Kubernetes pod(让我们称之为POD-A),我希望它使用某个配置文件来使用k8s API执行一些操作。配置文件将是一个YAML或JSON,由POD中的应用程序解析。 配置文件由云上的应用服务器托管,它的最新版本可以根据触发器提取。配置文件包含k8s集群中所有部署的配置细节,并将用于使用POD-A中的k8s API更新部署。 现在我想的是将这个配置文件保存在配置映射中,每次拉出一

  • 我现在尝试在Kubernetes集群上运行一个带有shell(/bin/bash)的简单容器。 我认为有一种方法可以通过使用和detach选项(命令上的选项)来保持容器在Docker容器上运行。 但是容器会退出几秒钟(就像使用命令启动一样,没有上面提到的选项)。并且ReplicationController重复地再次启动它。 是否有一种方法可以像命令中的选项一样,使容器在Kubernetes上运行

  • 问题内容: 我现在正在尝试在Kubernetes集群上运行带有shell(/ bin / bash)的简单容器。 我以为有一种方法可以通过使用and detach选项(命令上的选项)来保持容器在Docker容器上运行。 例如, Kubernetes中有这样的选择吗? 我试过使用类似以下的命令来运行容器: 但是容器会退出几秒钟(就像使用不带我上面提到的选项的命令启动一样)。然后Replication