Gitlab CI - 暴露生成的 docker 容器的端口/服务

时间:2020-12-20 15:11:47

标签: docker gitlab gitlab-ci nginx-ingress

我已经建立了一个 Gitlab CI 的测试工厂

  • Ubuntu 18.04 VM 上的 Gitlab-CE
  • Docker gitlab 运行器
  • Microk8s 集群
  • 我可以安装 gitlab 管理的 Ingress 控制器

当我正在运行 dind 时,我应该如何将端口 4000 公开给我的主机 (VM) 以及最好的方法是什么?

  • 我尝试使用 gitlab 安装的入口控制器,但不确定 gitlab 托管应用程序的配置文件/yaml 在哪里?
  • 尝试了简单的 nodeport expose 并没有帮助
kubectl -n gitlab-managed-apps expose deployment <Gitlab Runner> --type=NodePort --port=4000

下面是我的 gitlab-ci.yaml 文件..

image: docker:19.03.13

services:
  - name: docker:18.09.7-dind
    command:
      [
        '--insecure-registry=gitlab.local:32000',
      ]

stages:
  - testing

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_HOST: tcp://localhost:2375
  DOCKER_TLS_CERTDIR: ""
  CI_REGISTRY_IMAGE: img1

before_script:
  - echo "$REG_PASSWORD" | docker -D login "$CI_REGISTRY" -u "$REG_USER" --password-stdin

testing:
  stage: testing
  tags: [docker]
  script:
    - docker pull "gitlab.local:32000/$CI_REGISTRY_IMAGE:latest"
    - docker images
    - hostname
    - docker run --rm -d -p 4000:4000 "gitlab.local:32000/$CI_REGISTRY_IMAGE:latest"
    - netstat -na | grep -w 4000
    - sleep 3600
  only:
    - master

1 个答案:

答案 0 :(得分:0)

我设法弄清楚使用 k8s 服务公开的问题是什么。是选择器没有明确定义。需要注意的几个关键点

  1. 我可以看到端口正在侦听 pod 内的 IPv6 接口 (::4000)。然而这不是问题

  2. 我在 gitlab runner 配置(例如 app: myapp)的 config.toml 中添加了 podLabels。这样,跑步者产生的每个 pod 都有一个预定义的标签

  3. 在我的 LB 服务的选择器部分使用了标签

希望对大家有用