coderZoe的博客 - CICD
type: channel
link: https://coderzoe.com/tag/CICD/
items: Gitlab CICD

Gitlab CICD
type: item
date: 2025-08-01T08:16:00+00:00
description: Gitlab CICD本文讲一下如何使用gitlab来做CICD：使用gitlab做代码仓库，同时用gitlab的CI功能完成代码扫描、编译打包、镜像构建和镜像中心，并使用k8s来做部署。我们的流程是先使用gitlab来做完整的流程，一步步的由简到繁，一点点增加功能和优化过程，致力于达到真实gitlab企业的CICD效果。优化内容包括但不限于使用nexus、harbor等搭建私库优化CI的构建效率，使用k8snamespace做多环境隔离，并通过ConfigMap和Secret存储环境变量等。整个CICD均采用GitOps的一切皆代码 (Everything as Code)思想。Git作为一切的来源，这代表除了代码本身，CI流水线要代码化、k8s的部署要代码化、k8s环境变量配置也要代码化。整个测试将使用四台服务器，服务器操作系统均为Debian12192.168.31.193 作为gitlab、gitlab-runner以及后续的jenkins、habor等部署192.168.31.240、192.168.31.66、192.168.31.97 三个k8s节点，为服务做到多节点部署项目所用gitlab版本为最新的18.1.1-ce.0项目完整代码和配置可见：coderZoe/cicd-test-project1. Gitlab CI1.1 Gitlab部署services: gitlab: image: gitlab/gitlab-ce:18.1.1-ce.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.31.193' registry_external_url 'http://192.168.31.193:5050' ports: - '80:80' - '443:443' - '22:22' # 镜像中心的端口 - '5050:5050' volumes: - '/home/gitlab/config:/etc/gitlab' - '/home/gitlab/logs:/var/log/gitlab' - '/home/gitlab/data:/var/opt/gitlab' shm_size: '1024m'注意，这里gitlab使用了ssh的22端口和http与https的80与443端口，且我直接映射出了，因此宿主机不能占用这些端口，如果宿主机占用了，可以修改gitlab所用端口，见Install GitLab in a Docker container | GitLab Docs1.2 创建项目登录gitlab后，创建一个group并在该group下创建一个项目：1.3 创建runnergitlab的runner负责执行具体的CICD任务，我们创建一个runner并将其分配到上面的test-group下。首先修改docker-compose.yml，创建一个runner：services: gitlab: image: gitlab/gitlab-ce:18.1.1-ce.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.31.193' registry_external_url 'http://192.168.31.193:5050' ports: - '80:80' - '443:443' - '22:22' - '5050:5050' volumes: - '/home/gitlab/config:/etc/gitlab' - '/home/gitlab/logs:/var/log/gitlab' - '/home/gitlab/data:/var/opt/gitlab' shm_size: '1024m' # gitlab runner gitlab-runner: image: 'gitlab/gitlab-runner:v18.1.1' container_name: gitlab-runner restart: always volumes: # runner的配置 - '/home/gitlab/runner:/etc/gitlab-runner' # 将宿主机的docker server映射出来，方便runner可以操作宿主机docker - …