← 返回首页
🚀

GitLab CI/CD:Runner架构与Auto DevOps实践

📂 architecture ⏱ 1 min 177 words

GitLab CI/CD:Runner架构与Auto DevOps实践

GitLab Runner架构

GitLab Runner是执行CI/CD作业的代理程序,支持Shell、Docker、Kubernetes等多种执行器。Runner可以部署在本地服务器、云实例或Kubernetes集群中。

GitLab Server → 注册Runner → 分配Job → 执行Pipeline → 上报结果
                              ↓
                    ┌─────────┴─────────┐
                    │    Runner执行器    │
                    │  Shell | Docker    │
                    │  K8s | VirtualBox  │
                    └───────────────────┘

Runner配置与注册

Runner安装与注册

# 安装Runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner

# 注册Runner
sudo gitlab-runner register \
  --url https://gitlab.example.com/ \
  --registration-token $REGISTRATION_TOKEN \
  --executor docker \
  --docker-image alpine:latest \
  --description "docker-runner" \
  --tag-list "docker,linux" \
  --run-untagged="true"

Runner配置文件

# /etc/gitlab-runner/config.toml
concurrent = 4
check_interval = 3

[runners](/notes/runners)
  name = "Production Runner"
  url = "https://gitlab.example.com/"
  executor = "docker"
  [runners.docker]
    image = "alpine:latest"
    privileged = true
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
  [runners.cache]
    Type = "s3"
    Shared = true

Auto DevOps

Auto DevOps是GitLab内置的自动化CI/CD框架,自动检测项目类型并配置完整的流水线。

# .gitlab-ci.yml Auto DevOps配置
include:
  - template: Auto-DevOps.gitlab-ci.yml

variables:
  AUTO_DEVOPS_PLATFORM_DOMAIN: gitlab.example.com
  KUBE_NAMESPACE: auto-devops-$CI_COMMIT_REF_SLUG

流水线优化策略

# 使用缓存加速构建
build:
  stage: build
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
      - .npm/
  script:
    - npm ci --prefer-offline

# 并行执行测试
test:unit:
  stage: test
  script: npm run test:unit
  
test:integration:
  stage: test
  script: npm run test:integration

Runner集群管理

大规模部署时,建议使用Runner集群配合负载均衡:

# Runner自动伸缩配置(Kubernetes执行器)
[runners](/notes/runners)
  [runners.kubernetes]
    namespace = "gitlab-ci"
    cpu_limit = "2"
    memory_limit = "4Gi"
    service_cpu_limit = "0.5"
    service_memory_limit = "1Gi"