温馨提示×

如何在Linux上为GitLab设置CI/CD

小樊
41
2025-10-18 15:47:27
栏目: 智能运维

1. 前提条件
确保Linux服务器已安装GitLab(若未安装,可参考官方文档通过apt/yum安装GitLab CE),且具备管理员权限。

2. 安装GitLab Runner
GitLab Runner是执行CI/CD任务的代理,需先安装并注册:

  • 安装Runner
    根据Linux发行版选择安装方式(以Ubuntu为例):
    # 添加GitLab Runner的GPG密钥和软件源
    curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/install/repositories/runner/gitlab-runner/gpgkey
    echo "deb https://packages.gitlab.com/runner/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
    # 更新包列表并安装
    sudo apt-get update
    sudo apt-get install gitlab-runner -y
    
  • 注册Runner
    执行以下命令,按提示输入GitLab实例URL(如https://gitlab.com)和注册Token(从GitLab项目→Settings→CI/CD→Runners获取):
    sudo gitlab-runner register
    
    选择执行器(推荐shell(简单任务)或docker(隔离环境)),设置Runner描述(如My Linux Runner)和标签(如ci,deploy)。

3. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程(核心结构包括stagesjobs):

  • 基础示例(Java项目)
    stages:
      - compile
      - test
      - build
      - deploy
    # 编译阶段:使用Maven打包
    compile:
      stage: compile
      script:
        - echo "Compiling code..."
        - mvn clean compile
      artifacts:
        paths:
          - target/classes/  # 传递给后续job的产物
    # 测试阶段:运行单元测试
    test:
      stage: test
      script:
        - echo "Running tests..."
        - mvn test
    # 构建阶段:生成Docker镜像
    build:
      stage: build
      image: docker:latest  # 使用Docker镜像
      services:
        - docker:dind       # 启用Docker-in-Docker
      variables:
        DOCKER_HOST: tcp://docker:2375
        DOCKER_TLS_CERTDIR: ""  # 禁用TLS(仅测试环境)
      script:
        - echo "Building Docker image..."
        - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
        - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      only:
        - master  # 仅master分支触发
    # 部署阶段:将镜像部署到Kubernetes
    deploy:
      stage: deploy
      image: bitnami/kubectl:latest
      script:
        - echo "Deploying to Kubernetes..."
        - kubectl set image deployment/my-app my-app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      only:
        - master
    
  • 关键说明
    • stages:定义流程阶段(顺序执行,前一个阶段成功才会触发下一个);
    • artifacts:传递上一job的产物(如编译后的文件)给后续job;
    • only:指定触发分支(如mastermain);
    • image:指定job运行的容器镜像(如node:latestpython:3.9);
    • services:配合image使用的辅助服务(如Docker-in-Docker)。

4. 配置GitLab项目

  • 添加变量
    进入项目→Settings→CI/CD→Variables,添加敏感信息(如CI_REGISTRY_USERCI_REGISTRY_PASSWORD、服务器SSH密钥),避免硬编码在.gitlab-ci.yml中。
  • 启用Runner
    确保Runner已在GitLab项目→Settings→CI/CD→Runners中激活(显示为“Active”)。

5. 触发CI/CD流程
.gitlab-ci.yml文件提交到GitLab仓库的指定分支(如master),GitLab会自动检测文件并触发流水线:

git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master

可在GitLab项目→CI/CD→Pipelines页面查看流水线状态(成功/失败)、各job日志及执行时间。

6. 进阶优化

  • 缓存依赖:加速构建(如缓存node_modules或Maven本地仓库):
    cache:
      paths:
        - node_modules/  # Node.js项目
        - .m2/repository/  # Maven项目
    
  • 并行job:同时运行多个任务(如同时运行单元测试和集成测试):
    test_unit:
      stage: test
      script: echo "Running unit tests..."
    test_integration:
      stage: test
      script: echo "Running integration tests..."
    
  • 通知机制:通过Webhook或邮件发送流水线结果通知(进入项目→Settings→Integrations配置)。

0