← 返回首页

CI/CD自动化部署流水线搭建

前言

CI/CD(持续集成/持续部署)是现代软件开发的核心实践。本文介绍如何使用GitLab CI搭建完整的自动化部署流水线。

一、流水线架构设计

一个完整的CI/CD流水线通常包含以下阶段:

  • 代码检查:Lint、静态分析
  • 单元测试:自动化测试验证
  • 构建:编译、打包、生成镜像
  • 部署:自动部署到测试/生产环境

二、GitLab CI配置示例

# .gitlab-ci.yml
stages:
  - lint
  - test
  - build
  - deploy

lint:
  stage: lint
  image: node:20-alpine
  script:
    - npm ci
    - npm run lint

test:
  stage: test
  image: node:20-alpine
  script:
    - npm ci
    - npm run test
  coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'

build:
  stage: build
  image: docker:24
  services:
    - docker:24-dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  only:
    - master

deploy:
  stage: deploy
  image: alpine
  script:
    - apk add --no-cache openssh-client
    - ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_HOST "cd /opt/app && docker compose pull && docker compose up -d"
  only:
    - master
  when: manual

三、Docker镜像推送

构建完成后自动推送镜像到私有仓库:

# 登录仓库
echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin

# 打标签并推送
docker tag myapp:$CI_COMMIT_SHA registry.example.com/myapp:latest
docker push registry.example.com/myapp:latest

四、部署策略

4.1 滚动更新

逐步替换旧版本容器,实现零停机部署:

# docker-compose.yml
services:
  api:
    image: myapp:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first

4.2 蓝绿部署

同时运行新旧版本,通过Nginx切换流量:

# 切换Nginx上游
upstream backend {
    server api-blue:3000;   # 新版本
    # server api-green:3000;  # 旧版本(下线)
}

五、回滚机制

部署失败时快速回滚到上一个稳定版本:

# 回滚脚本
#!/bin/bash
PREVIOUS_TAG=$(git tag --sort=-creatordate | head -2 | tail -1)
docker compose pull myapp:$PREVIOUS_TAG
docker compose up -d myapp
CI/CD的核心价值在于:让每一次代码变更都能快速、安全地交付到用户手中。