在 gitlab runner 上共享 docker 容器内的卷

如何解决在 gitlab runner 上共享 docker 容器内的卷

因此,我正在尝试将一个包含项目文件的工作目录安装到 gitlab 运行器上的子实例中,类似于 DinD 设置。我希望能够在 docker 实例中安装一个卷,这将允许我四处闲逛和测试东西。像 e2e 测试等等……无需编译新容器来注入我需要的文件……理想情况下,我可以在 DinD 环境中共享数据,而无需为每个运行的作业构建新容器……

我尝试了以下操作(使用 docker:dind 时未安装 Docker 卷(#41227)·问题·GitLab.org / GitLab FOSS·GitLab)并且我安装了一些目录,但这不是我正在查找的项目数据

所以,测试作业,我创建了一个虚拟文件,我希望将该目录挂载到容器中并查看文件...

我有一个测试 ci yml,它符合我的要求。我在要挂载的卷中制作测试文件,我希望在目录列表中看到它,但遗憾的是没有。我第二次尝试这个,我无法获得容器 ID,因为标签不存在于跑步者上,而且总是空白……但是,第一阶段显示出希望,因为它在外面的“壳”跑步者上完美运行k8s。但是,一旦我将标签更改为使用 k8s 运行器,它就会失败。我可以看到旧目录文件 /web 和我正在挂载的目录,但看不到其中的文件。奇怪吗?

ci.yml

image: docker:stable
services:
  - docker:dind

stages:
  - compile

variables:
  SHARED_PATH: /builds/$CI_PROJECT_PATH/shared/
  DOCKER_DRIVER: overlay2

.test: &test
  stage: compile
  tags:
- k8s-vols
  script:
  - docker version
  - 'export TESTED_IMAGE=$(echo ${CI_JOB_NAME} | sed "s/test //")'
  - docker pull ${TESTED_IMAGE}
  - 'export SHARED_PATH="$(dirname ${CI_PROJECT_DIR})/shared"'
  - echo ${SHARED_PATH}
  - echo ${CI_PROJECT_DIR}
  - mkdir -p ${SHARED_PATH}
  - touch ${SHARED_PATH}/test_file
  - touch ${CI_PROJECT_DIR}/test_file2
  - find ${SHARED_PATH}
  #- find ${CI_PROJECT_DIR}
  - docker run --rm -v ${CI_PROJECT_DIR}:/mnt ${TESTED_IMAGE} find /mnt
  - docker run --rm -v ${CI_PROJECT_DIR}:/mnt ${TESTED_IMAGE} ls -lR /mnt
  - docker run --rm -v ${SHARED_PATH}:/mnt ${TESTED_IMAGE} find /mnt
  - docker run --rm -v ${SHARED_PATH}:/mnt ${TESTED_IMAGE} ls -lR /mnt

test alpine: *test
test ubuntu: *test
test centos: *test


testing:
  stage: compile
  tags:
- k8s-vols
  image:
name: docker:stable
entrypoint: ["/bin/sh","-c"]
  script:
# get id of container
- export CONTAINER_ID=$(docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=$CI_JOB_ID" -f "label=com.gitlab.gitlab-runner.type=build")
# get mount name
- export MOUNT_NAME=$(docker inspect $CONTAINER_ID -f "{{ range .Mounts }}{{ if eq .Destination \"/builds/${CI_PROJECT_NAMESPACE}\" }}{{ .Source }}{{end}}{{end}}" | cut -d "/" -f 6)
# run container
- docker run -v $MOUNT_NAME:/builds -w /builds/$CI_PROJECT_NAME --entrypoint=/bin/sh busybox -c "ls -la"

这是我正在使用的值文件...

image: docker-registry.corp.com/base-images/gitlab-runner:alpine-v13.3.1
imagePullPolicy: IfNotPresent
gitlabUrl: http://gitlab.corp.com
runnerRegistrationToken: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
runnerToken: ""
unregisterRunners: true
terminationGracePeriodSeconds: 3600
concurrent: 5
checkInterval: 10
rbac:
  create: true
  resources: ["pods","pods/exec","secrets"]
  verbs: ["get","list","watch","update","create","delete"]
  clusterWideAccess: false
metrics:
  enabled: true
runners:
  image: docker-registry.corp.com/base-images/docker-dind:v1
  imagePullPolicy: "if-not-present"
  requestConcurrency: 5
  locked: true
  tags: "k8s-vols"
  privileged: true
  secret: gitlab-runner-vols
  namespace: gitlab-runner-k8s-vols
  pollTimeout: 180
  outputLimit: 4096
  kubernetes:
    volumes:
    - type: host_path
      volume:
        name: docker
        host_path: /var/run/docker.sock
        mount_path: /var/run/docker.sock
        read_only: false
  cache: {}
  builds: {}
  services: {}
  helpers:
    cpuLimit: 200m
    memoryLimit: 256Mi
    cpuRequests: 100m
    memoryRequests: 128Mi
    image: docker-registry.corp.com/base-images/gitlab-runner-helper:x86_64-latest
  env:
    NAME: VALUE
    CI_SERVER_URL: http://gitlab.corp.com
    CLONE_URL:
    RUNNER_REQUEST_CONCURRENCY: '1'
    RUNNER_EXECUTOR: kubernetes
    REGISTER_LOCKED: 'true'
    RUNNER_TAG_LIST: k8s-vols
    RUNNER_OUTPUT_LIMIT: '4096'
    KUBERNETES_IMAGE: ubuntu:18.04
    KUBERNETES_PRIVILEGED: 'true'
    KUBERNETES_NAMESPACE: gitlab-runners-k8s-vols
    KUBERNETES_POLL_TIMEOUT: '180'
    KUBERNETES_CPU_LIMIT:
    KUBERNETES_MEMORY_LIMIT:
    KUBERNETES_CPU_REQUEST:
    KUBERNETES_MEMORY_REQUEST:
    KUBERNETES_SERVICE_ACCOUNT:
    KUBERNETES_SERVICE_CPU_LIMIT:
    KUBERNETES_SERVICE_MEMORY_LIMIT:
    KUBERNETES_SERVICE_CPU_REQUEST:
    KUBERNETES_SERVICE_MEMORY_REQUEST:
    KUBERNETES_HELPER_CPU_LIMIT:
    KUBERNETES_HELPER_MEMORY_LIMIT:
    KUBERNETES_HELPER_CPU_REQUEST:
    KUBERNETES_HELPER_MEMORY_REQUEST:
    KUBERNETES_HELPER_IMAGE:
    KUBERNETES_PULL_POLICY:
securityContext:
  fsGroup: 65533
  runAsUser: 100
resources: {}
affinity: {}
nodeSelector: {}
tolerations: []
envVars:
    - name: CI_SERVER_URL
      value: http://gitlab.corp.com
    - name: CLONE_URL
    - name: RUNNER_REQUEST_CONCURRENCY
      value: '1'
    - name: RUNNER_EXECUTOR
      value: kubernetes
    - name: REGISTER_LOCKED
      value: 'true'
    - name: RUNNER_TAG_LIST
      value: k8s-vols
    - name: RUNNER_OUTPUT_LIMIT
      value: '4096'
    - name: KUBERNETES_IMAGE
      value: ubuntu:18.04
    - name: KUBERNETES_PRIVILEGED
      value: 'true'
    - name: KUBERNETES_NAMESPACE
      value: gitlab-runner-k8s-vols
    - name: KUBERNETES_POLL_TIMEOUT
      value: '180'
    - name: KUBERNETES_CPU_LIMIT
    - name: KUBERNETES_MEMORY_LIMIT
    - name: KUBERNETES_CPU_REQUEST
    - name: KUBERNETES_MEMORY_REQUEST
    - name: KUBERNETES_SERVICE_ACCOUNT
    - name: KUBERNETES_SERVICE_CPU_LIMIT
    - name: KUBERNETES_SERVICE_MEMORY_LIMIT
    - name: KUBERNETES_SERVICE_CPU_REQUEST
    - name: KUBERNETES_SERVICE_MEMORY_REQUEST
    - name: KUBERNETES_HELPER_CPU_LIMIT
    - name: KUBERNETES_HELPER_MEMORY_LIMIT
    - name: KUBERNETES_HELPER_CPU_REQUEST
    - name: KUBERNETES_HELPER_MEMORY_REQUEST
    - name: KUBERNETES_HELPER_IMAGE
    - name: KUBERNETES_PULL_POLICY
hostAliases:
  - ip: "10.10.x.x"
    hostnames:
    - "ch01"
podAnnotations:
  prometheus.io/path: "/metrics"
  prometheus.io/scrape: "true"
  prometheus.io/port: "9252"
podLabels: {}

因此,我对舵图进行了一些调整。我在配置图中添加了一个卷部分......

config.toml: |
concurrent = {{ .Values.concurrent }}
check_interval = {{ .Values.checkInterval }}
log_level = {{ default “info” .Values.logLevel | quote }}
{{- if .Values.metrics.enabled }}
listen_address = ‘[::]:9252’
{{- end }}
volumes = ["/builds:/builds"]
#volumes = ["/var/run/docker.sock:/var/run/docker.sock",“/cache”,“/builds:/builds”]

我尝试使用最后一行,其中包括 docker sock mount,但是当它运行时,它抱怨找不到 mount docker.sock,文件未找到,所以我只在本节中使用了 builds 目录,并且在值文件中,添加了 docker.sock 安装。它似乎工作正常。除了这个安装的东西之外的其他一切......

我也看到了将跑步者设置为特权的例子,但这对我来说似乎没什么作用......

当我运行管道时,这是输出......

enter image description here

enter image description here

所以你看不到任何文件......

感谢您抽出宝贵时间认真提出您的要求,这真的很有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-