换链网 - 免费换链、购买友链、购买广告,专业的友情链接交换平台 logo

CI/CD实战项目

My Queen2025-12-17 15:01:430

CI/CD实战项目:构建自动化部署流水线

目录

  1. 简介
  2. CI/CD概述
  3. 项目背景与目标
  4. 技术选型
  5. 项目结构
  6. CI/CD流程设计
  7. Jenkins配置
  8. GitHub Actions配置
  9. 部署到云环境
  10. 测试与验证
  11. 总结

简介

在现代软件开发中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率、降低发布风险的重要手段。通过CI/CD,开发团队可以快速地将代码变更集成到主分支,并通过自动化测试和部署流程,确保代码质量与系统稳定性。

本文将通过一个具体的实战项目,展示如何从零开始搭建一套完整的CI/CD流水线,涵盖代码构建、自动化测试、部署到云环境等关键环节。读者将学会如何使用GitHub Actions、Jenkins等主流工具,实现高效的自动化开发与部署流程。


CI/CD概述

什么是CI/CD?

持续集成(CI)是指开发人员将代码频繁地提交到共享仓库中,每次提交后由自动化系统自动构建和测试,以快速发现和修复问题。持续交付(CD)则是指在CI的基础上,确保代码在任何时刻都可以被部署到生产环境,从而实现快速、可靠、可重复的发布。

CI/CD的核心目标是:

  • 提高代码质量
  • 缩短发布周期
  • 降低发布风险
  • 提高团队协作效率

为什么需要CI/CD?

在传统开发模式中,代码集成和部署常常是手动操作,容易出错,效率低下。而CI/CD通过自动化流程,可以:

  • 避免错误的代码被合并
  • 快速反馈开发结果
  • 保证每次提交都可部署
  • 降低部署复杂度

项目背景与目标

项目背景

本项目是一个基于Spring Boot的Web应用,用于管理用户的在线课程信息。项目包含前端(React)和后端(Spring Boot)两部分,需要部署到AWS EC2实例上。

项目目标

本项目的CI/CD流程需要实现以下功能:

  1. 当代码提交到GitHub仓库时,自动触发构建流程
  2. 自动运行单元测试和集成测试
  3. 构建Docker镜像并推送到私有仓库
  4. 自动部署到AWS EC2实例
  5. 实现可视化监控和日志查看

技术选型

模块 技术 说明
代码仓库 GitHub 代码托管平台
CI/CD工具 GitHub Actions / Jenkins 自动化构建与部署
容器化 Docker 应用容器化
部署环境 AWS EC2 云服务器环境
依赖管理 Maven / npm 项目依赖管理
日志系统 ELK Stack(Elasticsearch, Logstash, Kibana) 日志收集与分析

项目结构

本项目的目录结构如下:

复制代码
/course-management-app/
├── backend/              # Spring Boot 后端项目
│   ├── pom.xml
│   ├── src/
│   └── ...
├── frontend/             # React 前端项目
│   ├── package.json
│   ├── src/
│   └── ...
├── Dockerfile            # 后端Docker镜像构建文件
├── .github/workflows/    # GitHub Actions 工作流配置
│   └── ci-cd.yml
├── README.md

CI/CD流程设计

1. 代码提交

开发者将代码提交到GitHub的main分支,触发CI/CD流程。

2. 构建阶段

  • 使用GitHub Actions或Jenkins启动构建任务
  • 执行Maven或npm构建命令
  • 构建成功后,生成Docker镜像

3. 测试阶段

  • 运行单元测试和集成测试
  • 使用JUnit、Jest等框架进行测试
  • 生成测试报告

4. 部署阶段

  • 将构建的Docker镜像推送到私有仓库(如Docker Hub或AWS ECR)
  • 通过SSH连接AWS EC2实例
  • 使用Docker命令拉取镜像并启动容器

5. 监控与反馈

  • 使用ELK Stack收集日志
  • 通过Jenkins或GitHub Actions显示构建状态
  • 实现邮件或Slack通知

Jenkins配置

安装Jenkins

  1. 在AWS EC2实例上安装Jenkins:

    bash 复制代码
    sudo apt update
    sudo apt install openjdk-11-jdk -y
    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt update
    sudo apt install jenkins -y
  2. 启动Jenkins服务:

    bash 复制代码
    sudo systemctl start jenkins
    sudo systemctl enable jenkins
  3. 访问Jenkins网页:http://<EC2_PUBLIC_IP>:8080

创建Jenkins任务

  1. 登录Jenkins后,点击“新建任务”。
  2. 输入任务名称(如course-management-cicd)。
  3. 选择“自由风格项目”。
  4. 在“源码管理”中配置GitHub仓库地址。
  5. 在“构建触发器”中配置“GitHub hook trigger for GITScm polling”。
  6. 在“构建”中添加以下命令:
bash 复制代码
# 构建后端项目
cd backend
mvn clean install

# 构建前端项目
cd ../frontend
npm install
npm run build

# 构建Docker镜像
cd ../
docker build -t course-management-backend:latest . 

# 推送镜像到Docker Hub
docker login
docker push your-docker-hub-username/course-management-backend:latest
  1. 在“构建后操作”中添加“Execute shell”脚本,用于部署到EC2:
bash 复制代码
ssh -i /path/to/your-key.pem user@ec2-public-ip << 'EOF'
    docker pull your-docker-hub-username/course-management-backend:latest
    docker stop course-management-backend
    docker rm course-management-backend
    docker run -d -p 8080:8080 --name course-management-backend your-docker-hub-username/course-management-backend:latest
EOF

GitHub Actions配置

创建GitHub Actions工作流

在项目根目录下创建.github/workflows/ci-cd.yml文件:

yaml 复制代码
name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Set up JDK
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'adopt'

    - name: Build backend
      run: |
        cd backend
        mvn clean install

    - name: Build frontend
      run: |
        cd frontend
        npm install
        npm run build

    - name: Build Docker image
      run: |
        docker build -t course-management-backend:latest .

    - name: Push Docker image
      run: |
        docker login -u ${{ secrets.DOCKER_HUB_USER }} -p ${{ secrets.DOCKER_HUB_TOKEN }}
        docker tag course-management-backend:latest ${{ secrets.DOCKER_HUB_USER }}/course-management-backend:latest
        docker push ${{ secrets.DOCKER_HUB_USER }}/course-management-backend:latest

    - name: Deploy to EC2
      run: |
        ssh -i ${{ secrets.SSH_PRIVATE_KEY }} user@ec2-public-ip << 'EOF'
          docker pull ${{ secrets.DOCKER_HUB_USER }}/course-management-backend:latest
          docker stop course-management-backend
          docker rm course-management-backend
          docker run -d -p 8080:8080 --name course-management-backend ${{ secrets.DOCKER_HUB_USER }}/course-management-backend:latest
        EOF

配置Secrets

在GitHub仓库的“Settings > Secrets and variables > Secrets”中添加以下Secret:

  • DOCKER_HUB_USER: Docker Hub用户名
  • DOCKER_HUB_TOKEN: Docker Hub API Token
  • SSH_PRIVATE_KEY: 用于SSH连接EC2的私钥(建议使用GitHub Actions的secrets配置)

部署到云环境

1. 选择云平台

本项目部署在AWS EC2实例上。选择Ubuntu 22.04 LTS作为操作系统。

2. 安装Docker

在EC2实例上安装Docker:

bash 复制代码
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker

3. 配置SSH密钥

将GitHub Actions中使用的SSH密钥添加到EC2实例的~/.ssh/authorized_keys中,确保GitHub Actions可以访问EC2。


测试与验证

1. 构建测试

  • 提交代码到GitHub的main分支,触发GitHub Actions构建流程。
  • 检查构建日志,确认是否成功完成构建和部署。

2. 功能测试

  • 打开浏览器,访问http://<EC2_PUBLIC_IP>:8080,查看前端页面是否正常加载。
  • 测试后端API接口是否正确响应。

3. 日志监控

  • 使用ELK Stack收集Docker容器日志。
  • 在Kibana中查看日志,确保无错误信息。

4. 自动化测试

  • 使用Jest或JUnit编写单元测试和集成测试。
  • 在CI/CD流程中运行测试,确保代码质量。

总结

通过本项目,我们完成了从代码提交到自动部署的完整CI/CD流程。使用GitHub Actions和Jenkins,我们实现了自动化构建、测试与部署,提高了开发效率和系统稳定性。

CI/CD不仅是一种技术实践,更是一种开发文化。通过自动化流程,我们能够更快速地响应需求变化,降低错误率,并提升产品的交付质量。

在实际项目中,CI/CD的流程需要根据团队规模、项目复杂度和部署环境进行定制化配置。希望本文能够为读者提供一个清晰的参考,帮助大家掌握CI/CD的核心理念与实战技巧。


作者:技术专家
日期:2025年4月5日
版本:1.0