搭建CI/CD 流水线简单说明
一、CI/CD 流水线是什么?
CI(持续集成)
- 目标:频繁(每日多次)将代码合并到主分支,通过自动化测试快速发现错误。
- 关键动作:
- 代码提交后自动触发构建(编译、打包)。
- 运行单元测试、集成测试。
- 生成可部署的产物(如 JAR 包、Docker 镜像)。
CD(持续交付/部署)
- 持续交付:确保代码随时可手动部署到生产环境(通过自动化测试后)。
- 持续部署:在持续交付基础上,自动部署到生产环境(无需人工干预)。
流水线(Pipeline)
- 将 CI 和 CD 串联成自动化工作流,包含多个阶段:
graph LRA[代码提交] --> B[代码编译/打包]B --> C[自动化测试]C --> D{测试通过?}D -- 是 --> E[构建镜像/产物]E --> F[部署到测试环境]F --> G[验收测试]G --> H{生产部署条件满足?}H -- 是 --> I[部署到生产]
二、如何搭建 CI/CD 流水线?
核心步骤
-
托管代码
- 使用 Git 仓库(GitHub、GitLab、Gitee 等)。
-
编写流水线配置
-
在项目中添加配置文件(如
.gitlab-ci.yml
、Jenkinsfile、.github/workflows/deploy.yml
)。 -
定义阶段和执行脚本(示例):
# GitHub Actions 示例jobs:build-and-deploy:steps:- name: 构建项目run: mvn clean package- name: 运行单元测试run: mvn test- name: 构建 Docker 镜像run: docker build -t my-app .- name: 部署到测试环境if: success() # 仅当测试通过时执行run: kubectl apply -f k8s-deployment.yaml
-
-
选择 CI/CD 工具
-
免费方案:
- GitHub Actions(GitHub 仓库免费额度)
- GitLab CI(社区版免费)
- Jenkins(开源免费,需自建服务器)
-
商业方案:
- GitLab Premium、GitHub Enterprise、AWS CodePipeline
-
-
配置自动化触发
- 按事件触发(如
git push
、定时任务、PR 合并)。
- 按事件触发(如
-
连接部署环境
- 配置凭据(如 K8s 密钥、云账号 Access Key),实现自动部署。
三、要钱吗?
方案 | 费用说明 |
---|---|
开源工具 | Jenkins、Drone 等免费,但需自备服务器(或虚拟机资源)。 |
托管服务 | GitHub Actions:公开仓库免费,私有仓库每月有一定免费额度,超出需付费。 |
GitLab SaaS:免费版可用,高级功能需付费。 | |
云厂商集成 | AWS CodePipeline/Azure DevOps:按流水线执行次数和资源使用量收费。 |
隐性成本 | 服务器维护、存储空间、网络流量(如频繁拉取 Docker 镜像可能产生带宽费用)。 |
低成本起步建议: 选择 GitHub Actions + 免费额度(2000 分钟/月),或自建 Jenkins(利用闲置服务器)。
四、难吗?
难度分级
场景 | 难度 | 说明 |
---|---|---|
基础流水线 | ⭐☆ | 仅需编译代码 + 运行测试(如 Maven 项目)。 |
容器化部署 | ⭐⭐☆ | 需编写 Dockerfile + K8s 配置,熟悉镜像推送(如 Docker Hub)。 |
多环境部署 | ⭐⭐⭐☆ | 需管理测试/预发/生产环境,配置复杂权限和回滚策略。 |
微服务流水线 | ⭐⭐⭐⭐ | 需协调多个服务依赖、契约测试、分布式追踪集成。 |
降低难度的关键
- 模板复用:
- 使用 GitHub/GitLab 提供的模板快速生成流水线配置。
- 渐进式实践:
- 先实现 CI(自动测试),再扩展 CD(部署到测试环境)。
- 工具选择:
- 优先选托管服务(如 GitHub Actions),避免 Jenkins 插件兼容性问题。
- 基础设施即代码(IaC):
- 用 Terraform/Ansible 管理环境,确保部署一致性。
五、入门操作指南(以 GitHub Actions 为例)
-
在项目根目录创建
.github/workflows/main.yml
-
编写流水线:
name: CI/CD Pipeline on: [push] # 代码推送时触发jobs:build:runs-on: ubuntu-lateststeps:- name: 拉取代码uses: actions/checkout@v4- name: 构建项目run: mvn clean package- name: 单元测试run: mvn testdeploy-to-test:needs: build # 依赖 build 任务runs-on: ubuntu-latestif: github.ref == 'refs/heads/main' # 仅 main 分支触发steps:- name: 部署到测试环境uses: appleboy/ssh-action@masterwith:host: ${{ secrets.TEST_SERVER_IP }}username: ubuntukey: ${{ secrets.SSH_PRIVATE_KEY }}script: |cd /opt/app && ./deploy.sh
-
配置仓库 Secrets:
- 在 GitHub 仓库设置中填入
SSH_PRIVATE_KEY
和TEST_SERVER_IP
。
- 在 GitHub 仓库设置中填入
总结
-
成本:可免费起步(开源工具 + 基础资源),规模化后按需付费。
-
难度:中等(需掌握 YAML 编写、脚本编写、环境配置),但模板和托管服务大幅降低门槛。
-
推荐路径: